我正在尝试GL_POLYGON使用此代码将纹理映射到圆形:
void drawCircleOutline(Circle c, int textureindex)
{
float angle, radian, x, y; // values needed by drawCircleOutline
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureLib[textureindex]);
glBegin(GL_POLYGON);
for (angle=0.0; angle<360.0; angle+=2.0)
{
radian = angle * (pi/180.0f);
x = (float)cos(radian) * c.r + c.pos.x;
y = (float)sin(radian) * c.r + c.pos.y;
glTexCoord2f(x, y);
glVertex2f(x, y);
}
glEnd();
glDisable(GL_TEXTURE_2D);
}
Run Code Online (Sandbox Code Playgroud)
它在运行时看起来像这样.

应该是这样的:

我可能会问一些非常明显的东西而且我忽略了一些东西,但是我试图在它做某事之前创建一个暂停.
我已经看到这在网上很多地方使用 -
yield WaitForSeconds(2);
Run Code Online (Sandbox Code Playgroud)
但是我得到一个语法错误,
"错误CS1528:预期;或=(无法在声明中指定构造函数参数)(CS1528)(Assembly-CSharp)
这让我感到困惑,因为我不确定yield关键字的真正意义或作用是什么,而且我假设它WaitForSeconds是一个类,其中"2"在构造函数中(不在声明中),任何帮助都将受到赞赏.谢谢!
即时通讯尝试用openGL做一个小小的3D场景,并且包含一些照明,我对我的场景很好(虽然它没什么特别的),我试图添加一些照明,以给它一些效果.但是我可以在我的讲台上添加材料(没有纹理),这给了我光线,任何有纹理的东西都不会对它施加任何材料,因此它无视光线.下面是一些代码.
// Setup GL_LIGHT0
glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient); // Setup ambient light
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse); // Setup diffuse light
glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpecular); // Setup specular light
glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, ca);
glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, la);
glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, qa);
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 180.0f);
glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 0.0);
// Setup GL_LIGHT1
glLightfv(GL_LIGHT1, GL_AMBIENT, lightAmbient); // Setup ambient light
glLightfv(GL_LIGHT1, GL_DIFFUSE, lightDiffuse); // Setup diffuse light
glLightfv(GL_LIGHT1, GL_SPECULAR, lightSpecular); // Setup specular light
glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, ca);
glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, la);
glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, qa);
glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 180.0f);
glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 0.0);
// …Run Code Online (Sandbox Code Playgroud) 好的,所以我有一个非常大的正方形(网格),我用三角形组成,然后应用高度图来碰撞它.我现在要做的是获得网格线.我已经找到了一种方法来做到这一点,但这会导致片段着色器中的33个if语句仅用于x,然后另外33个用于y.我被告知我可以使用我现在正在做的事情并稍微不同地实现它(使用一些GLSL函数)只需要1或2个if语句.这是我目前的代码(并非所有代码都已完成,但可以让您了解我在做什么.)
#version 330
uniform sampler2D texture;
in vec2 texCoord;
layout (location=0) out vec4 fragColour;
void main(void) {
vec4 newColor;
vec2 line = texCoord * 32; // makes texCoords easier to number (as divided by 32 in the C++array)
if(line.x > 0 && line.x < 0.9)
{
newColor = vec4(1.0,1.0,1.0,1.0);
}
else if(line.x > 1 && line.x < 1.9)
{
newColor = vec4(1.0,1.0,1.0,1.0);
}
else if(line.x > 2 && line.x < 2.9)
{
newColor = vec4(1.0,1.0,1.0,1.0);
}
else if(line.x > 3 …Run Code Online (Sandbox Code Playgroud)