ios - OpenGL如何将模型在打开时使他默认在屏幕中央?
伊谢尔伦
伊谢尔伦 2017-04-17 17:25:18
0
1
270

如题,我再ios端实现了3d模型文件的展示,但是法线一问题。就是模型创造者在设计模型的时候并不一定是把模型放在坐标原点开始设计的,那么就导致我读出模型后,有的时候模型是在屏幕外边的,有的时候模型是超级大或者超级小到看不到的。那么请问,我该修改什么属性,能让它按照一定大小展示在屏幕中央呢?
下面是我的展示模型的代码。

float verxxx[]={这里有一系列三角面片数据}; glVertexAttribPointer(_positionSlot, 3, GL_FLOAT, GL_FALSE, 0, verxxx); glEnableVertexAttribArray(_positionSlot); GLuint buffer; glGenBuffers(1, &buffer); glBindBuffer(GL_ARRAY_BUFFER, buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(verxxx), verxxx, GL_STATIC_DRAW); // 3、将缓冲区的数据复制进通用顶点属性中 glEnableVertexAttribArray(GLKVertexAttribPosition); glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 4*8, (char *)NULL + 0); //读顶点坐标 //4、继续复制其他数据 // 在前面预定义的顶点数据数组中,还包含了法线和纹理坐标,所以参照上面的方法,将剩余的数据分别复制进通用顶点属性中。 glEnableVertexAttribArray(GLKVertexAttribNormal); glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 4*8, (char *)NULL +12); //读法线 glEnableVertexAttribArray(GLKVertexAttribTexCoord0); glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 4*8, (char *)NULL + 24); //读纹理 glDrawArrays(GL_TRIANGLES, 0, sumFloat.count/7); glDeleteBuffers(1, &buffer);

指点一下,谢谢

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆 (1)
伊谢尔伦

解決了,我最後根據模型文件中所有的頂點數據,去到了最大和最小的xyz值,根據xyz值求出模型的中心點坐標,然後根據比例將模型在(0.0.0)處重繪即實現了模型在螢幕中心顯示。至於適合大小,則是求出模型的最大長徑,然後根據這個模型的長徑求出一個在螢幕上適當的比例。將所有的xyz值乘以此比例。 。 。 。完美解決。希望有人能夠用!

    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!