게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
OpenGL(C++) 태양계 관련 shading 질문드립니다ㅠㅠ
게시물ID : programmer_10536짧은주소 복사하기
작성자 : 떠있는구름
추천 : 0
조회수 : 808회
댓글수 : 2개
등록시간 : 2015/05/28 20:27:11
옵션
  • 베스트금지
  • 본인삭제금지

저번에도 질문드렸었는데 답변을 못 받아서 다시 올릴게요ㅠㅠ

현재 상태가 아래와 같습니다 ㅠㅠ 위에서 봤을 때는 아래처럼 태양에서 빛 받는거처럼 정상적으로 처리되는거 같은데..

p1.png

옆에서 봤을 때는 아래와 같이 이상하게 나오네요ㅠㅠ

바로 밑에 사진은 이제 행성들이 뒤로 넘어갈때이고, 그 밑에 사진은 행성들이 앞으로 다시 나올때인데..

p2.png

p3.png

위에서보면 빛이 태양에서 나오는게 맞는거 같은데, 옆에서보면 빛이 저한테 나오는거처럼 반응합니다.

일단 첫번째로 의심되는건 구의 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 벡터의 자표를 그냥 해당 점의 좌표로 잡았는데 이게 맞는건지를 잘 모르겠네요ㅠㅠ



전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호