Processing P3D(OpenGL)纹理绘制异常:无报错、环形纹理单色及透明处理咨询
Processing P3D纹理渲染问题解决
一、环形多四边形纹理显示单一颜色的问题
问题原因
- 未设置归一化纹理坐标模式
第二个代码中缺少textureMode(NORMAL),Processing默认使用IMAGE纹理模式,此时纹理坐标需要匹配图片的像素尺寸(比如1000x500的图坐标范围是0-1000和0-500),但你用的是0-1的归一化坐标,导致纹理采样错误,最终显示异常的单一颜色。 - 纹理坐标分配错误
每个四边形都使用(0,0)-(1,1)的纹理坐标,相当于每个小四边形都渲染整个纹理,叠加后视觉上变成单一颜色。环形纹理的横向应该对应角度从0到2π,每个小四边形需要对应纹理的一小段区域。
修正代码
void setup() { size(800,800,P3D); PImage ringtexture = loadImage("saturnringcolor.jpg"); textureMode(NORMAL); // 关键:启用归一化纹理坐标模式 PShape s = createShape(); s.beginShape(QUADS); s.noStroke(); float r2 = 250, r = 200; float nexta; s.texture(ringtexture); for (float a = 0; a < TWO_PI; a = nexta) { nexta = a + PI / 30; // 根据角度计算当前四边形对应的纹理横向坐标 float u1 = a / TWO_PI; float u2 = nexta / TWO_PI; // 绑定顶点位置与对应纹理坐标 s.vertex(r2 * cos(a), r2 * sin(a), u1, 0); s.vertex(r2 * cos(nexta), r2 * sin(nexta), u2, 0); s.vertex(r * cos(nexta), r * sin(nexta), u2, 1); s.vertex(r * cos(a), r * sin(a), u1, 1); } s.endShape(); background(0); translate(width/2, height/2); shape(s); }
二、透明通道图片的格式问题
是的,必须将JPEG转为PNG格式。JPEG格式本身不支持Alpha透明通道,只有PNG、TIFF等格式能保留透明信息。处理步骤:
- 将带透明通道的土星环图片导出为PNG格式
- 在Processing中加载PNG图片后,默认的
blendMode(BLEND)已支持透明混合,若PShape未启用样式,可调用s.enableStyle()或设置s.fill(255)确保透明通道生效。
示例加载代码:
PImage ringtexture = loadImage("saturnringcolor.png");
内容的提问来源于stack exchange,提问作者Dov
相关产品推荐
相关产品推荐

