| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- opengl3.3
- opengl 3.3
- string_view
- Codeforce
- C++
- shader
- Color struct
- OpenGL
- gsls
- voronoi
- Texture2D
- ShaderProgram
- 아트
- Today
- Total
목록분류 전체보기 (8)
Longseabear DevLog
Voronoi NoiseVoronoi 노이즈는 컴퓨터 그래픽스와 절차적 텍스처링에서 자주 사용되는 노이즈 생성 기법 중 하나로 voronoi 다이어그램을 기반으로 한 노이즈 패턴이다. 가감없이 뭐든 할 수 있는 멋진 노이즈다. 물 표현, 볼케이노 표현 등 다양한 상황에서 활용 가능하다. Unity shader code(Voronoi Node | Shader Graph | 6.9.2)를 분석하여 연구해보았다. 아래 테스트 코드는 GLSL Editor 에서 코드를 직접 시뮬레이션 해볼 수 있다.함께 분석하며 노이즈의 세계에 빠져보자 :)Random Point SamplingVoronoi는 랜덤 샘플링 된 점을 기준으로 noise pattern을 생성한다. 따라서, 샘플링 된 점을 시각화 할 수 있다면 더 좋..
[C++] compile time에서 class type name 얻기 **PRETTY_FUNCTION과 FUNCSIG** PRETTY_FUNCTION(clang, GNUC)과 FUNCSIG(MSVC)를 사용해서 함수 및 메소드의 이름과 시그니처 정보를 얻을 수 있다. 주로 디버깅과 로깅 작업에서 사용하기 위해 정의된 매크로이다. 중요한 것은 template가 포함되어있을 때 template 이름도 같이 포함해서 리턴해준다는 것이다. 각 OS에서 위의 두 매크로를 잘 활용하면 get_class_name() 형식으로 원하는 타입의 이름을 스트링으로 얻을 수 있다. #include using namespace std; class MyTypeName { int val; }; template constexpr ..
Educational Codeforces Round 144 Editorial 기한 2023-02-28 solving 3/6 abstract 등수 936등 소회 D번 문제를 풀지 못한 것이 통한 A. Typical Interview Problem Problem - A - Codeforces Problem - A - Codeforces codeforces.com 3과 5의 최소 공배수인 15부터 정답이 반복된다. 총 8개의 문자 k의 최대값이 10이기 때문에 10개의 슬라이딩 윈도우 했을 때 모든 경우의 수가 나올 수 있도록 사전에 string을 세팅하면 된다. (8개 문자 3번 반복) 멍청하게 2번만 반복했다가(16문자), 두번 틀리고 분노의 4번 반복으로 통과하였다. #include #include #i..
Codeforces Round #854 Editorial 기한 2023-02-28 solving 3/9 소회 Blue에 복귀하였다.. A. Recent Actions Problem - A - Codeforces queue구조로 항상 n+1~n+m사이의 값이 맨 앞에 추가되기 때문에 boolean 변수를 하나 두고 시뮬레이션 하면 된다. 맨 마지막부터 순서대로 증가하는 순서로 정답이 결정된다. #include #include #include #include #include #include #include #include #include #include #include #include #include #define debug(x) printf("(%s): %d", #x, x) #define MAX(a,b) ..
더러운 Opengl texture 설정코드를 단순화 해 볼 것이다. 목표는 다음과 같다. auto texture = LEapsGL::Texture2D("resources/textures/container.jpg"); texture.Apply(); // Draw while(true).. shaderProgramObject.use(); shaderProgramObject.setFloat("deltaTime", timeValue); texture.use(); glBindVertexArray(VAO); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); Unity와 비슷하게 구조화했다. texture class를 통해 이미지를 불러오고, 처리가 모두 끝나면 Apply ..
평화롭게 Texture 편을 학습하며 Texture를 관리하는 class를 만들고 있었는데, 만들다보니 unity의 Texture2D에 있던 멤버 변수들이 이해가 되는게 아니던가(mipCount 라던지). 이를 경험하고나니 내 코드를 좀 더 unity 처럼 구조적으로 관리하고 싶어졌다. 이를 위해 가장 기본적인 color struct를 만들어봤다. color 구조체에 대한 내용은 unity API 문서를 대충 참고하여 만들어봤다. Color.h #pragma once #define MAKE_COLOR_STATIC_VALUE(color, r,g,b,a) const Color Color::color = {r,g,b,a}; namespace LEapsGL { union Color { struct { float..
Tutorial Shader code 기본적으로 opengl에서 사용할 shader code를 작성할 때 다음과 같이 작성한다. 각각의 Shader를 생성하고, comfile 한다. GLProgram 객체에 shader를 할당한다. 할당된 shader를 linking 한다. 기존 컴파일한 shader는 제거한다. 코드로는 다음과 같다. unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vertexShaderSource, NULL); glCompileShader(vertexShader); int success; char infoLog[512]; glGetShaderiv(vertexShad..
Computer vision / Image processing / Coumpter graphics 관련 프로젝트를 진행하기 위하여 기본적인 opengl framework를 공부해보고자 한다. 공부하면서 생각난 내용들과 공부하면서 얻은 정보들을 공유할 예정이다. OpenGL은 3D application과 game 등에서 널리 사용되고 있는 cross-platform 기반의 graphics API이다. Opengl 3.3은 기존 미리 정의된 그래픽스 파이프라인만 사용 가능했던 피처에서 벗어나 직접 프로그래머가 그래픽스 파이프라인을 제어하기 위한 코드(shader)를 작성함으로써 개발자의 자유도를 높힌 버전이다. Vulkan도 그렇고, 그래픽스 API는 점점 low-level 방향으로 발전해나가는 듯 하다. ..