gpt4 book ai didi

opengl - 渲染透明纹理

转载 作者:行者123 更新时间:2023-12-04 07:04:33 25 4
gpt4 key购买 nike

我有一个纹理,其中一些部分是透明的,我想将其应用到一个对象上,该对象的表面是一些不透明的 Material (或者颜色,如果它更简单的话),但最终对象变得透明。我希望最终的对象完全不透明。

这是我的代码:

首先我设置 Material :

   glDisable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT);
glColor4f(0.00, 0.00, 0.00, 1.00);
glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
glColor4f(0.80, 0.80, 0.80, 1.00);
glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
glColor4f(0.01, 0.01, 0.01, 1.00);
glEnable(GL_COLOR_MATERIAL);

然后我设置了 VBO
   glBindTexture(GL_TEXTURE_2D, object->texture);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glBindBuffer(GL_ARRAY_BUFFER, object->object);
glVertexPointer(3, GL_FLOAT, sizeof(Vertex), ver_offset);
glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), tex_offset);
glNormalPointer(GL_FLOAT, sizeof(Vertex), nor_offset);

最后我画了对象
   glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);

glDisable(GL_TEXTURE_2D);
glBlendFunc(GL_ONE, GL_ZERO);
glDrawArrays(GL_TRIANGLES, 0, object->num_faces);

glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDrawArrays(GL_TRIANGLES, 0, object->num_faces);

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);

我尝试将不同的参数传递给 glBlendFunc() ,但没有成功。我在这里上传了源代码: http://dpaste.com/83559/

更新
我收到 this ,但我想要 this (或没有纹理 this )。

第二和第三张图片是用 glm产生的.我研究了源代码,但由于我对 OpenGL 的了解有限,所以我不太了解。

最佳答案

如果您尝试将两个纹理应用于您的对象,您确实希望设置两个纹理并使用多重纹理来实现这种外观。您的方法是绘制几何图形两次,这是对性能的巨大浪费。

Multitexturing 只会从两个纹理单元中采样,而只绘制一次几何图形。您可以使用着色器(真正应该做的事情)来做到这一点,或者您仍然可以使用固定功能管道(参见:http://bluevoid.com/opengl/sig00/advanced00/notes/node62.html)

关于opengl - 渲染透明纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1312023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com