java - 所有多边形都变得透明,如何修复?
问题描述
我在我的项目中做了一些事情,所有的多边形都变得透明了。
我下载了我的旧 git,一切都很好,但它仍然是透明的。
Tick 事件:在渲染所有多边形绘图中
public void render() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.925f, 0.98f, 0.988f, 1f);
glPushMatrix();
game.render();
glPopMatrix();
}
最后更改的功能:
public void drawModel(Vector3f camLocation) {
for (int i = 0; i < count; i++) {
glPushMatrix();
glTranslated(copies[i].x, copies[i].y, copies[i].z);
glRotatef(rotations[i], 0, 1, 0);
texture.bind();
glEnable(GL_TEXTURE_2D);
glBegin(GL_TRIANGLES);
if (Stereometry.getVectorLenght(camLocation, copies[i]) < lodRange) {
k = 0;
} else {
k = m.length - 1;
}
for (Model.Face face : m[k].getFaces()) {
//Первая точка
Vector3f n1 = m[k].getNormals().get(face.getNormalIndices()[0] - 1);
glNormal3f(n1.x, n1.y, n1.z);
if (m[k].hasTextureCoordinates() && hasText) {
Vector2f t1 = m[k].getTextureCoordinates().get(face.getTextureCoordinateIndices()[0] - 1);
glTexCoord2f(t1.x, t1.y);
}
Vector3f v1 = m[k].getVertices().get(face.getVertexIndices()[0] - 1);
glVertex3f(v1.x * scale, v1.y * scale, v1.z * scale);
...2 More Vertex...
glEnd();
glDisable(GL_TEXTURE_2D);
glRotatef(-rotations[i], 0, 1, 0);
glTranslated(-copies[i].x, -copies[i].y, -copies[i].z);
}
}
解决方案
如果启用了纹理,则默认情况下纹理元素的颜色乘以当前颜色,因为默认情况下纹理环境模式 ( GL_TEXTURE_ENV_MODE
) 为GL_MODULATE
. 见glTexEnv
。
这会导致纹理的纹理像素的颜色和 alpha 通道被 设置的最后一种颜色“混合” glColor4f
。
在渲染纹理之前设置“白色”颜色和 1 的 alpha 通道,以解决您的问题:
glColor4f(1, 1, 1, 1);
请注意,如果当前颜色的 Alpha 通道低于 1 并且启用了混合,则可能会导致意外的透明效果。
另一种解决方案是将环境模式更改为GL_REPLACE
,而不是:
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
推荐阅读
- vue.js - 使用 GraphQL 在 Nuxtjs 中检索 Prismic 切片内容在项目中不起作用
- android - 如何在 kotlin(语言环境)中更改语言
- r - 在闪亮的应用程序中调整导航栏菜单的高度
- android - NestedScrollView 内的 RecyclerView 在 NotifyDataSetChanged 后继续滚动 - 问题
- reactjs - 不引用数组时只查看渲染
- stripe-payments - 如何使用 Stripe SDK 向客户发送成功付款的自动电子邮件?
- java - 将动态参数传递给 @MapKey("${dynamicParam}") (My-Batis)
- c - 二维数组:为什么当我将 ptr 声明为 int ptr[4][4]; 时 ptr 和 *ptr 相同?
- c# - 我的程序在 client.DetectDocumentText(image) GoogleVisionAPI 处没有得到响应
- python - 在烧瓶服务器本身中运行 yolo 模型。如何?