gpt4 book ai didi

opengl - 着色器和 opengl 转换

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

当我将着色器(在 cg 中)添加到我的 opengl 程序时,所有本地转换(glRotatef、glTranslatef 和 glPopMatrix 和 glPopMatrix 之间的 glScalef)停止工作。不过,在 push/pop 之外的转换仍然有效。那么这里可能有什么问题呢?

更新:
我在场景中心有一个旋转的立方体:

glPushMatrix();
glRotatef(angle, 1, 0, 0);
drawBox();
glPopMatrix();

之后我将世界观和世界观投影矩阵发送到着色器:
cgGLSetStateMatrixParameter(
myCgVertexParam_modelViewProj,
CG_GL_MODELVIEW_PROJECTION_MATRIX,
CG_GL_MATRIX_IDENTITY
);

cgGLSetStateMatrixParameter(
myCgVertexParam_modelView,
CG_GL_MODELVIEW_MATRIX,
CG_GL_MATRIX_IDENTITY
);

顶点着色器代码:
void C9E2v_fog(float4 position    : POSITION,
float4 color : COLOR,

out float4 oPosition : POSITION,
out float4 oColor : COLOR,
out float fogExponent : TEXCOORD1,

uniform float fogDensity, // Based on log2
uniform float4x4 modelViewProj : MODELVIEW_PROJECTION_MATRIX,
uniform float4x4 modelView : MODELVIEW_MATRIX)
{
// Assume nonprojective modelview matrix
float3 eyePosition = mul(modelView, position).xyz;
float fogDistance = length(eyePosition);
fogExponent = fogDistance * fogDensity;
oPosition = mul(modelViewProj, position);

//oDecalCoords = decalCoords;
oColor = color;
}

所以最后立方体不旋转,但如果我写(不推/弹出)
glRotatef(angle, 1, 0, 0);
drawBox();

一切正常。我该如何解决?

最佳答案

您可以使用固定功能管道或可编程管道。由于您切换到着色器,固定功能管道“停止工作”。要切换回来,您需要glUseProgram(0) .您需要将这些本地转换发送到着色器。

关于opengl - 着色器和 opengl 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4132356/

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