한글 자료는 관련 코드 찾기가 힘들어서

 

Stackoverflow 찾아가면서 해봤는데 몇 시간 동안 헤매서 찾아왔습니다..


일단 코드는

 

var vertices = new Float32Array([

11/2, 1/2, 1/2, 1/2, 1/2, 1/2,

9/2, 1/2, 1/2, 1/2, 0, 1/2,

9/2, -1/2, 1/2, 1/2, 0, 0,

11/2, -1/2, 1/2, 1/2, 1/2, 0,

11/2, -1/2, -1/2, 0, 1/2, 0,

11/2, 1/2, -1/2, 0, 1/2, 1/2,

9/2, 1/2, -1/2, 0, 0, 1/2,

9/2, -1/2, -1/2, 0, 0, 0,

 

-9/2, 1/2, 1/2, 1/2, 1/2, 1/2,

-11/2, 1/2, 1/2, 1/2, 0, 1/2,

-11/2, -1/2, 1/2, 1/2, 0, 0,

-9/2, -1/2, 1/2, 1/2, 1/2, 0,

-9/2, -1/2, -1/2, 0, 1/2, 0,

-9/2, 1/2, -1/2, 0, 0, 1/2,

-11/2, 1/2, -1/2, 0, 0, 1/2,

-11/2, -1/2, -1/2, 0, 0, 0,

]);

 

var indices = new Uint8Array ([

0, 1, 2, 0, 2, 3,

0, 3, 4, 0, 4, 5,

0, 5, 6, 0, 6, 1,

1, 6, 7, 1, 7, 2,

7, 4, 3, 7, 3, 2,

4, 7, 6, 4, 6, 5,

 

8, 9, 10, 8, 10, 11,

8, 11, 12, 8, 12, 13,

8, 13, 14, 8, 14, 9,

9, 14, 15, 9, 15, 10,

15, 12, 11, 15, 11, 10,

12, 15, 14, 12, 14, 13

]);

 

VertexIndex들 이용해서 (-5, 0, 0), (5, 0, 0)Cube 2개를 그리고

 

그 좌표랑 카메라 위치(0, 0, 10), 보는 방향(0, 0, 0), up 벡터(0, 1, 0) 와 계산해서 -1 ~ 1 범위 안으로 들어오면 화면에 보이게 그리는 식으로 계산하니까

 

일단 화면 밖에 상자 2개를 그렸음


var VSHADER_SOURCE =

'attribute vec3 a_Position; \n' +

'uniform mat4 u_ViewMatrix;\n' +

'uniform mat4 u_ModelMatrix;\n' +

'uniform mat4 u_ProjMatrix;\n' +

'attribute vec3 Color; \n' +

'varying vec3 vColor; \n' +

'void main() { \n' +

' gl_Position = u_ProjMatrix * u_ViewMatrix * u_ModelMatrix * vec4(a_Position, 1.0); \n' +

' gl_PointSize = 10.0; \n' +

' vColor = Color; \n' +

'} \n';

 

 

//VertexShader

 

   

var u_ViewMatrix = gl.getUniformLocation(gl.program, 'u_ViewMatrix');

var u_ModelMatrix = gl.getUniformLocation(gl.program, 'u_ModelMatrix');

var u_ProjMatrix = gl.getUniformLocation(gl.program, 'u_ProjMatrix');

 

modelMatrix.setTranslate(0, 0, 10);

viewMatrix.setLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);

projMatrix.setPerspective(45, (canvas.width)/(canvas.height), 1, 100);

 

gl.uniformMatrix4fv(u_ModelMatrix, false, modelMatrix.elements);

gl.uniformMatrix4fv(u_ViewMatrix, false, viewMatrix.elements);

gl.uniformMatrix4fv(u_ProjMatrix, false, projMatrix.elements);

 

여기서 변형시킬 때 setTranslate 부분이 문제가 있는 것 같아서 찾아보니까 matrix.setTranslate(float, float) 형식으로 사용하던데

(0, 0, 10)으로 안쓰고 (float, float) 형식으로 이리저리 숫자 바꿔봐도 화면에 안 나오더라고

 

setLookAT(0, 0, 10)에서 (0, 0, 0)을 바라보고 up 벡터는 (0, 1, 0) 설정하고

setPerspectiveFOV 45, 캔버스 화면 거리는 1보다 크고 100보다 작아서 설정했는데 일단 이 둘은 문제 없는 것 같음


계산 할 때 값이 -1 보다 작거나 1 보다 커져서 안 나오는 것 같은데 정확히 모르겠다

normalized 돼서 입력한 값이 문제인 것 같진 않은데 내가 제대로 이해하고 있었으면 이미 해결했을 것 같아서

   

어디선가 내가 잘못 이해하고 있는 것 같아서 물어보고 싶음