본문 바로가기

ComputerGraphics [고려대학교_한정현]

(11)
[Learn OpenGL 번역] 2-8 시작하기 - 좌표시스템 좌표시스템 Vertex(정점)들을 Transfrom(변환)하는 것은 수학적으로 Transform Matrix( 변환 행렬 ) 을 사용하면 된다고 배웠습니다. OpenGL에서는 각 Vertex Shader ( 프로그램 입니다) 가 실행 된 후 우리가 그릴 모든 Vertex(정점) 들의 각 x,y,z좌표는 (-1.0 ~ 1.0) 사이의 정규화된 좌표로 표시되어야 합니다. 이 범위 밖의 좌표들은 보이지 않게 됩니다. 보통 우리가 직접 구성한 자유로운 범위의 좌표를 지정하고 Vertex Shader에서 이 좌표들을 NDC좌표 (-1.0,1.0) 으로 변환합니다. VertexShader에서 나온 NDC 좌표들은 Rasterizer에게 보내집니다. 화면위의 2D 좌표/ 픽셀로 변환됩니다. #NDC좌표로은 4번의 T..
07강 - 래스터라이져 [랜더링 Pipe Line 복습] Object Space 에서 정의된 Triangle Mesh를 이루는 Vertex Shader 들이 있었다. 이를 변환해서 Clip Space Position 을 출력해서 다음단계인 Rasterizer 에게 넘겨줍니다. Rasterizer는 이 Clip Space Position들을 조립해서 삼각형으로 다시 만듭니다. 삼각형이 스크린에 나타날 것이고 ( 나타난다 : 스크린의 픽셀들을 몇개들을 점유하면서 색을 보여준다는 뜻) 픽셀 위치마다 Fragment 라는 것을 정의한다. (Fragment Shader 프로그램이 하는일) 나머지 단계에서 컬러값들을 생성한다. (Output Merger) [앞으로 Reterizer의 5단계의 중요한 것들을 배울것이다] Clipping -..
6강 OpenGLES 1 #version 300 es // 3.0버전 //[Input] uniform mat4 worldMat, viewMat, projMat; // 모든 벡터에 동일하게 적용되는 uniform Input들 // 각각 Transform(변환)을 나타낸다. //[Input] // layout 은 프로그램에서 저장되는 위치index. layout(location =0) in vec3 position; layout(location =1) in vec3 normal; layout(location =2) in vec2 texCoord; //[Output] out vec3 v_normal; out vec2 v_texCoord; void main(){ gl_Position = projMat * viewMat * worldMa..
Android + OpenGLES로 삼각형 그리기 오늘은 OpenGLES 로 삼각형을 그려보도록 하겠습니다. [결과물] [프로젝트 파일] [AndroidMenifest.xml] ... [MainActivity.java] 1. 뷰를 생성하고, 셋팅해준다. package com.samman.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.app.Activity; import android.os.Bundle; import android.view.WindowManager; public class MainActivity extends Activity { private MainGLSurfaceView mGLSurfaceView; @Override protected void..
Android + OpenGLES로 사각형 그리기 [OpenGLES 의 도형그리기 기본] OpenGLES 는 다음과 같은 방법으로 점, 선, 도형을 그려나간다. [사각형 그리기] 보통 삼각형 두개를 합쳐서 그린다. 아래는 사각형을 그릴때 필요한 두개의 삼각형을 반시계 방향으로그려보고, 좌표를 생각해 본 것이다. [소스코드] 는 이전의 Trangle 소스코드에서 Triangle.java 의 다음 파란색 부분만 수정하면 된다. package com.samman.myapplication; import android.opengl.GLES20; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; public class Triangle { //삼사각형 정점 3개의 좌..
5강(1) - 랜더링 과정 중에서 View Transform ( World Space -> Camera Space 변환) GPU 에 의해서 Rendering 이 어떻게 수행되는지 자세하게 Detail 들을 배워나갈 것이다. 주전가와 같은 polygon mesh 가 drawcall 에 의해서 GPU 내부로 들어간다. Polygon Mesh 의 정점들은 vertex array 에 저장이 되어있을 것이다. [ Vertex shader ] Shader라는 프로그램을 짜줘야지만 GPU 에서 실행된다. Vertex array 에 저장된 정점들을 한번에 하나씩 불러들이면서 여러가지 연산을 수행한다. [ Resterizer ] 하드웨어에 셋팅된 정해진 기능만 수행한다. Index array 의 정보들을 이용해서 삼각형들을 다시 일단 조립을 한다. 이 삼각형은 픽셀들의 조합으로 되어있을텐데, 이 픽셀들의 정보를 ( 색상 ) Resteriz..
4강(4) 3차원에서 World Transform ( Object Space -> World Space 변환 ) 이번시간에는 3D에서의 Transform 을 배워볼 것이다. [3차원 Scaling] [3차원 Rotation] 2차원 회전은 항상 '점'중심이었습니다. 3차원 회전 축을 중심으로 회전합니다. ex_1) z축 회전 x랑 y만 변한다. (z좌표는 rotation 후에도 유지된다.) R 구간을 변경하면 된다. ex_2) x축 회전 ex_3) y축 회전 ex_4) CCW vs CW rotation 반시계 방향 회전 Θ가 양수 시계방향 회전 은 Θ가 음수로 된다. [3차원 Translation] 2차원에서 처럼 사이즈1만큼 더큰 Idnetity행렬을 곱해준다. 4x4 Identity 행렬에 이동할 만큼의 변위벡터 Dx Dy Dz 만 집어 넣어주면 된다. [ 3차원 변호나을 4X4 곱셈으로 표현하기 ] ex_1)..
4강(2) - Transform 3x3행렬의 L구간, T구간 Linear Transform (선형변환) 에는 Scaling , Ratation 이 있다. Translation 은 Non Linear Transform 이다. 이 세개는 Affine Transform 이라고 부른다. 이는 저번시간에 배웠듯이 아무리 복잡한 Affine Transform 들의 구성이어도 3x3행렬과의 곱셈 으로 표현할 수 있다. [ Affine Transform 의 3x3행렬 의 작동방식을 연구해보자 ] 2가지 규칙을 얻을 수 있다. 규칙1] 어떤 조합을 하더라도 마지막 행은 항상 0 , 0 , 1 이 된다. 규칙2] [ L | T ] 구간으로 나눌 수 있다. - 규칙1에서 말한 행을 제외시키고서는, 구간을 리니어구간, non리니어 구간으로 나눌수 있다. [ L구간 | T구간 ] - [..