You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Processing P3D(OpenGL)纹理绘制异常:无报错、环形纹理单色及透明处理咨询

Processing P3D纹理渲染问题解决

一、环形多四边形纹理显示单一颜色的问题

问题原因

  1. 未设置归一化纹理坐标模式
    第二个代码中缺少textureMode(NORMAL),Processing默认使用IMAGE纹理模式,此时纹理坐标需要匹配图片的像素尺寸(比如1000x500的图坐标范围是0-1000和0-500),但你用的是0-1的归一化坐标,导致纹理采样错误,最终显示异常的单一颜色。
  2. 纹理坐标分配错误
    每个四边形都使用(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 08:30:20