ios - OpenGL如何将模型在打开时使他默认在屏幕中央?
伊谢尔伦
伊谢尔伦 2017-04-17 17:25:18
[iOS讨论组]

如题,我再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值乘以此比例。。。。完美解决。希望有人能够用到!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号