저번에도 질문드렸었는데 답변을 못 받아서 다시 올릴게요ㅠㅠ
현재 상태가 아래와 같습니다 ㅠㅠ 위에서 봤을 때는 아래처럼 태양에서 빛 받는거처럼 정상적으로 처리되는거 같은데..
옆에서 봤을 때는 아래와 같이 이상하게 나오네요ㅠㅠ
바로 밑에 사진은 이제 행성들이 뒤로 넘어갈때이고, 그 밑에 사진은 행성들이 앞으로 다시 나올때인데..
위에서보면 빛이 태양에서 나오는게 맞는거 같은데, 옆에서보면 빛이 저한테 나오는거처럼 반응합니다.
일단 첫번째로 의심되는건 구의 normal vector를 잘못잡은거 같기도한데..
구와 구의 normal 벡터를 만드는 함수는 아래와 같습니다.
struct vertex {
vec3 pos;
vec3 norm;
vec4 color;
int index;
};
void makeSphere(){
float radius = 1.0f;
vertex radiusVertices[triCount];
float rTheta = (180 / (float)triCount) * PI / 180;
for (int i = 0; i < triCount; i++){
float px = (cosf(rTheta * i) * 0) - (sinf(rTheta * i) * radius);
float py = (sinf(rTheta * i) * 0) + (cosf(rTheta * i) * radius);
radiusVertices[i].pos = vec3(-px, py, 0);
radiusVertices[i].color = vec4(1, 1, 0, 1);
}
vertex vertices[triCount][triCount];
GLuint Indices[((triCount - 1) * 2)*triCount];
float theta = (360 / (float)triCount) * PI / 180;
float x = radiusVertices[0].pos[0];
float y = radiusVertices[0].pos[1];
float z = 0;
int index_counter = 0;
for (int i = 0; i < triCount; i++){
x = radiusVertices[i].pos[0];
y = radiusVertices[i].pos[1];
for (int j = 0; j < triCount; j++){
float x2 = (cosf(theta * j) * x) - (sinf(theta * j) * 0);
float z2 = (sinf(theta * j) * x) + (cosf(theta * j) * 0);
vertices[i][j].pos = vec3(x2, y, z2);
vertices[i][j].color = vec4(1, 1, 0, 1);
vertices[i][j].norm = vec3(x2, y, z2).normalize();
vertices[i][j].index = index_counter++;
}
}
int k = 0;
for (int i = 0; i < triCount - 1; i++){
for (int j = 0; j < triCount; j++){
Indices[k++] = vertices[i][j].index;
Indices[k++] = vertices[i + 1][j].index;
}
}
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// geneation of index buffer
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Indices), Indices, GL_STATIC_DRAW);
}
구의 normal 벡터의 자표를 그냥 해당 점의 좌표로 잡았는데 이게 맞는건지를 잘 모르겠네요ㅠㅠ