0
그래서 저는 gluCylinder를 사용하지 않고 분할 된 GL_QUAD_STRIP을 사용하여 원형 튜브의 느낌을주기 위해 만든 OpenGL에서 원통을 가지고 있습니다. 나는 실린더 주위로 줄을 감싸는 텍스처 이미지를 얻고 싶지만 그 방법을 알 수는 없다. 저는 OpenGL의 텍스처에 관해서는 아직 초보자입니다. 아마 제가 생각한 것처럼 텍스쳐를 이해하지 못할 수도 있습니다. 당신은 실린더 (실린더 너무 높이 주위에 종이를 포장 =의 높이로 텍스처 매핑 프로세스를 생각하면OpenGL에서 GL_QUAD_STRIP로 만든 실린더에 텍스처 매핑
float x,z,angle; // Used to calculate cylinder wall
float height = 75.0f; // Height of the cylinder
float diameter = 10.0f; // Diameter of the cylinder, or more specifically,
float normal[3],corners[2][3]; // Storeage for vertex calculations
float numSides = 100.0f;
float step;
float sideLength;
float perimeter; // Not perimeter of ideal circular cylinder
// but actual perimeter of what is drawn
int whichSide; // Used to keep track of which side you are on during the loop
step = (GL_PI/numSides/2.0f); // Approximate the cylinder wall with
// some number of flat segments
sideLength =
2.0f*diameter*(float)sin(GL_PI/(2.0f*numSides)); // Calculate the length of each side
perimeter = numSides * sideLength;
printf("There are %f sides on the small cylinder\nthat are each %f units
long.\nThe dimensions of the texture must be\nclose to %f x %f\n\n\n", numSides,
sideLength, perimeter, height);
// Set material color for head of screw
glColor3f(1.0f, 1.0f, 1.0f);
// Assemble the wall as 100 quadrilaterals formed by
// placing adjoining Quads together
glFrontFace(GL_CCW);
glBegin(GL_QUAD_STRIP);
for(angle = (2.0f*GL_PI); angle > 0.0f; angle -= step)
{
// Calculate x and y position of the first vertex
x = diameter*(float)sin(angle);
z = diameter*(float)cos(angle);
// Get the coordinate for this point and extrude the
// length of the cylinder.
corners[0][0] = x;
corners[0][1] = -height/2.0f;
corners[0][2] = z;
corners[1][0] = x;
corners[1][1] = height/2.0f;
corners[1][2] = z;
// Instead of using real normal to actual flat section
// Use what the normal would be if the surface was really
// curved. Since the cylinder goes up the Y axis, the normal
// points from the Y axis out directly through each vertex.
// Therefore we can use the vertex as the normal, as long as
// we reduce it to unit length first and assume the y component
// to be zero
normal[0] = corners[1][0];
normal[1] = 0.0f;
normal[2] = corners[1][2];
//@@@@@#####*****TEXTURING DONE HERE *****#####@@@@@//
// Reduce to length of one and specify for this point
ReduceToUnit(normal);
glNormal3fv(normal);
glTexCoord2f(((float)whichSide)/numSides,0.0f);
glVertex3fv(corners[0]);
glTexCoord2f(((float)whichSide)/numSides,1.0f);
glVertex3fv(corners[1]);
whichSide++;
}
일 했으니, 고마워요! – 23ChrisChen