gpt4 book ai didi

c++ - GL_POINTS 着色器中的样本纹理

转载 作者:太空狗 更新时间:2023-10-29 21:28:59 25 4
gpt4 key购买 nike

我有一个用纯色绘制粒子的着色器。我想让着色器对 FBO 纹理进行采样,以便每个粒子都可以作用于它“背后”的颜色。看起来应该很简单,但不是。

我已经简化了代码,这样我希望我的 FBO 被绘制在每个粒子的表面上,按比例缩小。丑陋,但至少可以证明我的粒子可以对纹理进行采样。相反,每个粒子只是一种纯色。我正在使用 OpenFrameworks,所以有一些抽象。我已经验证 tex.bind() 绑定(bind)到第一个纹理位置,并且我能够在没有 GL_POINTS 的情况下将着色器应用于 FBO。

这是我设置着色器、绘制 FBO 和渲染粒子的地方:

void Particles::draw(ofxFBOTexture &tex){
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
ofEnableSmoothing();
glEnable(GL_POINT_SPRITE_ARB);
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE_ARB);
glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE, GL_TRUE);
shader.begin();
shader.setUniform("winWidth", (float) width);
shader.setUniform("winHeight", (float) height);
tex.draw(0,0); // I've tried tex.bind() here too

for(int i = 0; i < lastDead; i++){
allParticles[i]->draw(this->shader);
}

shader.end();
glDisable(GL_VERTEX_PROGRAM_POINT_SIZE_ARB);
glDisable(GL_POINT_SPRITE_ARB);
ofDisableSmoothing();
glDisable(GL_BLEND);
}
// <snip>
void Particle::draw(ofxShader &shader){
if(dead) return;

// this must go outside glBegin
shader.setAttribute("size", size);
shader.setAttribute("velocity", xVel, yVel, 0.0);

glBegin(GL_POINTS);
glColor4f(r, g, b, multiplier * 0.8);
glVertex3f(x, y, 0);
glEnd();
}

这是我的顶点着色器:

#version 120
attribute float size;
attribute vec3 velocity;
varying vec3 vel;
uniform float winWidth;
uniform float winHeight;

void main() {
gl_PointSize = size;
gl_FrontColor = gl_Color;

gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;

vel = velocity;
}

...以及我的片段着色器的相关摘录,简化了调试:

#version 120
#extension GL_ARB_texture_rectangle : enable
varying vec3 vel;
uniform sampler2DRect tex;
uniform float winWidth;
uniform float winHeight;

void main() {
vec4 texColor = texture2DRect(tex, gl_TexCoord[0].st);
gl_FragColor = texColor;
}

最佳答案

您需要 gl_PointCoord.st 而不是 gl_TexCoord[0].st .

关于c++ - GL_POINTS 着色器中的样本纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5839095/

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