簡體   English   中英

GLKit:處理大型3D對象時的透明紋理

[英]GLKit: Transparent texture when dealing with big 3D object

我正在編寫3D查看器,它通過以下2個Raywenderlich教程來顯示.obj文件並提供一些基本手勢(固定,旋轉,縮放): http ://www.raywenderlich.com/48293/how-to-export-blender- 模型對OpenGL的ES-部分1

http://www.raywenderlich.com/50398/opengl-es-transformations-gestures

我能夠正確加載和顯示小的.obj文件,但是對於大的.obj文件,紋理突然變得透明 我已經對相同的紋理文件進行了測試,所以我認為不是圖像大小的原因 請查看以下屏幕截圖以了解一個想法:

大obj:約20000個頂點 大obj:約20000個頂點

小obj:約5000個頂點: 小obj:約5000個頂點

相當大的obj:約67000個頂點: 很大的obj:大約有67000個頂點

僅2種顏色(藍色和黃色)的紋理位圖,用於大型和大型objs 大對象中僅使用2種顏色(藍色和黃色)的紋理位圖

膠囊紋理(我不使用2種顏色的紋理,這樣我們就可以清楚地看到小obj中沒有透明度) 膠囊質地

我在不同的obj上嘗試了不同的紋理,這始終是相同的問題:當obj文件很大時,紋理開始透明。 我還在不同的物理Iphone上進行了測試,因此它並非特定於模擬器。 啟用/禁用gl_blend也不能解決問題。

您可以在http://pastecode.org/index.php/view/32247978中找到完整的代碼,這是我用來創建GLKBaseEffect並加載紋理圖像的代碼:

// Initialize
self.effect = [[GLKBaseEffect alloc] init];

// Texture
NSDictionary* options = @{ GLKTextureLoaderOriginBottomLeft: @YES };
NSError* error;
NSString* path = [[NSBundle mainBundle] pathForResource:@"capsule0.jpg" ofType:nil];

GLKTextureInfo* texture = [GLKTextureLoader textureWithContentsOfFile:path
                                                              options:options
                                                                error:&error];

if(texture == nil)
    NSLog(@"Error loading file: %@", [error localizedDescription]);

self.effect.texture2d0.name = texture.name;
self.effect.texture2d0.enabled = true;
self.effect.texture2d0.envMode = GLKTextureEnvModeReplace;


// Light
self.effect.light0.enabled = GL_TRUE;
self.effect.light0.position = GLKVector4Make(1.0f, 1.0f, 1.0f, 1.0f);
self.effect.lightingType = GLKLightingTypePerVertex;

這部分是在創建效果后在viewDidLoad()中設置OpenGL的:

// OpenGL ES Settings
glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);

我終於找到了解決方案:

首先,您需要在GLKView的情節提要中將深度格式設置為24或16: 在此處輸入圖片說明

然后通過在viewDidLoad()中啟用深度

    glEnable(GL_DEPTH_TEST);

最后,對於每個繪制調用,您需要清除深度緩沖區:

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM