목록전체 글 (79)
나만의 공부 노트
GLSL에서 사용 가능한 data type 기본 타입: int, float, double, uint, bool 벡터 타입: vecX: float형 벡터 bvecX: bool형 벡터 ivecX: int형 벡터 uvecX: uint형 벡터 dvecX: double형 벡터 행렬 타입: matX: float형 행렬 bmatX: bool형 행렬 imatX: int형 행렬 umatX: uint형 행렬 dmatX: double형 행렬 벡터 원소 접근 .x, .y, .z, .w 인덱스를 사용 .rgba, .stpq도 동일한 방식으로 사용 가능 swizzling 가능 얻어오고 싶은 인덱스를 연속으로 쓰기 .xyz => vec3 Vertex shader 각 정점 별로 설정된 vertex attribute를 입력받는다 몇 ..
glClear State-setting function State가 OpenGL context에 저장됨 glClearAccum(), glClearColor(), glClearDepth(), glClearIndex(), glClearStencil() State-using function OpenGL context에 저장된 State를 이용 glClear() OR 연산자 가능 GL_COLOR_BUFFER_BIT 현재 색 쓰기에 사용할 수 있는 버퍼입니다. GL_DEPTH_BUFFER_BIT 깊이 버퍼입니다. GL_ACCUM_BUFFER_BIT 누적 버퍼입니다. GL_STENCIL_BUFFER_BIT 스텐실 버퍼입니다. VAO(Vertex Array Object) void glGenVertexArrays(GL..
// 대부분의 플랫폼 #include // MacOS(deprecated 되는중..) #include 렌더링에 필요한 필수 함수들을 가지고 있다. glFinish, glColor3f, ... 등 플랫폼(win, mac, ...) 마다 위 헤더를 제공해준다. win의 경우, win95 이상이라면 opengl 1.1 버전까지의 api를 가지고 있는 헤더를 주고 있다. 이후 버전의 api는 전방 선언되지 않아서 컴파일 타임에 사용할 수 없다.(복잡한 방식으로 사용할 수 있긴 한데 아래에서 기술한다) mac의 경우, os 버전 마다 opengl에 선언된 api들이 다르다. 최신 os 라면 최신 gl api들이 전방 선언되어 있다. win 빌드 시, opengl32.lib를 링크해야한다. 그래픽 카드 벤더사(ex..
OpenGL은 스펙에 대한 정의일 뿐, 실제 구현 방법에 대해 작성되어있는 것은 아니다. 실제 구현은 벤더(ex. intel, nvidia, amd, etc ..)에서 드라이버를 구현하여 이를 .dll 형태로 제공한다. .dll 이기에 이러한 OpenGL 함수들을 런타임에 함수 포인터(저장된 위치)를 가져오는 작업이 필요하다. glad는 OpenGL의 모든 버전의 함수들을 전방 선언해두고, 컴파일 타임에 모두 사용할 수 있고 모든 함수들의 심볼을 로드 시도해보고 가능한 것은 사용할 수 있도록 도와주는 라이브러리이다. glad.h는 gl.h를 include 하기 전에 먼저 include해야한다. ex) glfw.h보다 위에서 glad.h를 include 해야함 -> 전처리 error를 glad.h에 넣어놓..
윈도우 창 & 사용자 입력 등등..을 해결하기 위한 라이브러리 크로스 플랫폼이며 OpenGL, Vulkan과 함께 사용이 가능하다. (이전에는 glut를 많이 썼는데, 이건 업데이트가 더이상 안되고 있다. 오픈 소스가 아니라서 소스 코드를 볼 수 없기도 하고, OpenGL만 되서 이젠 잘 안쓰는 것 같다. 예전에 그래픽스 수업 때.. glut 썼던 것 같은데) https://www.glfw.org/ An OpenGL library GLFW project home page. www.glfw.org https://github.com/glfw/glfw GitHub - glfw/glfw: A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and in..
Rendering pipeline 1. Vertex Fetch DirectX : Input Assembler라고 함 Scheduler라는 하드웨어가 vertices와 attributes를 다음 단계로 전송해줌 2. Vertex Processing 1 Graphics Command Processor: This coordinates the work processes. 4 Shader Engines (SE): An SE is an organizational unit on the GPU that can serve an entire pipeline. Each SE has a geometry processor, a rasterizer and Compute Units. 쉐이더 하나만 사용 가능 9 Compute Un..
.obj http://paulbourke.net/dataformats/obj/ Object Files (.obj) Object Files (.obj) Minimal example: box.obj Minimal textured example Vertex colour in OBJ files Object files define the geometry and other properties for objects in Wavefront's Advanced Visualizer. Object files can also be used to transfer geometric data paulbourke.net s : smoothing group = 엔진? 마다 지원 여부가 다름 Smoothing Groups are a t..
기본 구조 모듈 import Metal 가장 Low 레벨의 Metal 모듈 그래픽스 API를 가지고 있다. import MetalKit Metal을 유용하게 쓸 수 있도록 도와주는 유틸리티 모듈 Metal, Model I/O 모듈을 가지고 있음 Model I/O의 경우, MetalKit, GLKit, SceneKit 등에서 통합해서 사용할 수 있는 모델 로드 모듈 Metal 디바이스 guard let device = MTLCreateSystemDefaultDevice() else { fatalError("GPU is not supported") } iOS, watchOS 등은 GPU를 하나만 사용하므로 위의 API를 통해 기본 GPU를 얻어올 수 있다. let devices = MTLCopyAllDevi..
디자인 패턴 1. MVC 컨트롤러는 뷰와 모델을 알고 있고, 각각을 다룬다. 모델의 값이 변경되면, 뷰는 notify. polilng 등을 이용하여 업데이트한다. 뷰와 모델 사이의 의존성이 높아진다. 2. MVP 뷰가 주체적으로 수행하며 액션이 들어오면, 뷰와 1대1 매칭이 되는 프레젠터에게 데이터를 요청한다. 프레젠터는 알맞는 모델에서 값을 꺼내오고 이를 뷰에 반환하는 역할을 한다. 뷰와 모델 사이의 의존성은 없어졌지만, 뷰와 프레젠터의 의존성이 강해짐. 3. MVVM View Model : View를 표현하기 위해 만든 View를 위한 Model입니다. View를 나타내 주기 위한 Model이자 View를 나타내기 위한 데이터 처리를 하는 부분입니다. MVVM 패턴의 동작 순서는 아래와 같습니다. 사..
@main에 관하여 1. @ 이 심볼은 대체 뭐지? 가이드에 나와있다. https://docs.swift.org/swift-book/ReferenceManual/Attributes.html Attributes — The Swift Programming Language (Swift 5.5) Attributes There are two kinds of attributes in Swift—those that apply to declarations and those that apply to types. An attribute provides additional information about the declaration or type. For example, the discardableResult attribu..