묻고 답해요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
미해결게임 개발자를 위한 3D 그래픽스, 쉐이더, OpenGL (1) - 3D 그래픽스, OpenGL, 콜백 함수, 컬러 이론
비주얼 스튜디오 파일
3:18의 파일들이 어디있는지 모르겠습니다. visual studio는 설치되어 있는데, 제가 이해하기로는 컴퓨터에 설치되어 있는 비주얼 스튜디오 파일 안에 저러한 폴더들이 있다는 것으로 이해했는데 폴더들이 보이질 않습니다. glfw 폴더들은 잘 다운로드받은 것 같고, 혹시나 해서 비주얼 스튜디오를 다시 다운받아보기도 했는데 해결되지 않네요. 사진은 파일 탐색기에서 비주얼 스튜디오를 검색하고 연 폴더들입니다.
-
미해결삼각형의 실전! Vulkan 중급
VkSubmitInfo2에 대해 질문드립니다.
강의에서는 VkSubmitInfo2가 아닌 VkSubmitInfo를 통해 설명을 해주셨는데요. 다른 튜토리얼에서는 VkSubmitInfo2를 사용하고 있었는데 VkSubmitInfo2 구조체에 pWaitSemaphoreInfos와 pSignalSemaphoreInfos 두 가지 세마포어를 세팅해주고 있었습니다. 그리고 이 구조체를 vkQueueSubmit2 함수를 통해 큐에 제출하였는데요. 해당 튜토리얼에서는 엔진에서 graphics queue 하나를 사용하고 있었습니다. 근데 강사님께서는 큐와 큐 간의 동기화를 수행한다고 하셨는데, 큐를 하나 사용하는 경우에 두 개의 세마포어가 필요한 이유가 무엇일까요? 참고로 제가 본 튜토리얼은 vkguide 이고 https://vkguide.dev/docs/new_chapter_1/vulkan_mainloop_code/ 이 내용이 그것입니다.
-
해결됨삼각형의 실전! Vulkan 중급
VkImageLayout 열거형에 대해 질문드립니다.
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL 두 가지 열거형에서 데이터 전송 타겟과 소스의 의미가 이해가 가지 않는데요. 어떤 식으로 사용되는건지 예시를 혹시 알 수 있을까요?
-
미해결삼각형의 실전! Vulkan 중급
예제 코드 (on_vkQueueWaitIdle)로그 관련
이전에는 큰 문제 없었는데 최근 새로운 환경에서 예제를 다시 실행해보니 on_vkQueueWaitIdle 해당 로그가 엄청 많이 기록되는데 해결하는 방법이 있을까요?
-
해결됨게임 개발자를 위한 3D 그래픽스, 쉐이더, OpenGL (6) - 쉐이딩 기초, 퐁 리플렉션 모델, 블린-퐁 쉐이딩
RGB 값 관련 질문드립니다.
light.position = {-3.0f, 3.0f, 3.0f, 1.0f}; light.ambient = {0.2f, 0.2f, 0.2f, 1.0f}; light.diffuse = {5.0f, 5.0f, 5.0f, 1.0f}; light.specular = {7.0f,7.0f, 7.0f, 1.0f}; light.att = {1.0f, 0.2f, 0.2f, 1.0f}; material.ambient = { 1.0f, 1.0f, 1.0f, 1.0f }; material.diffuse = { 1.0f, 1.0f, 1.0f, 1.0f }; material.specular = { 1.0f, 1.0f, 1.0f, 1.0f }; material.shineness = 32.0f;강의에서 렌더링에 사용된 광원, 매터리얼 파라미터 값들입니다. RGB를 나타내는 값은 일반적으로 0.0~1.0 사이의 float 값을 써서, 이를 0~255 정수범위로 매핑해서 사용한다고 알고 있습니다.하지만 강의에서는 1.0 이 넘는 float 값을 그대로 사용하는 상황이여서, 이게 무슨 차이인지 궁금하여 문의 남깁니다.
-
미해결게임 개발자를 위한 3D 그래픽스, 쉐이더, OpenGL (6) - 쉐이딩 기초, 퐁 리플렉션 모델, 블린-퐁 쉐이딩
vert_phong.vert negate 질문
학습 관련 질문 ❓ 을 남겨주세요. 상세히 작성하면 더 좋아요!출장이 잦아서, ✍ 답변에 시간이 좀 걸릴 수는 있습니다. 양해 바랍니다. 🏃 안녕하세요, 강의를 듣고 직접 구현해보며 연습중인데 한 가지 궁금한게 생겨 질문 드립니다. 앞서 진행했던 강의의 vertex shader와 마찬가지로, z-negate 를 해주어야한다고 생각해서 버텍스 쉐이더에서 vPos를 구하고 vPos.z *= -1 을 해주고 있었습니다. 하지만 강의 소스코드에는 이 negate해주는 부분이 없는게 왜인지 잘 모르겠습니다.강의 소스코드에는 C++ 코드 상에서 negate되어지는 부분이 있는걸까요? 저는 negate하지 않으면 아래와 같은 결과로 렌더링됩니다. vertex shader에서 z-negate하면 잘 나옵니다. #version 410 core struct Light { vec4 position; vec4 ambient; vec4 diffuse; vec4 specular; vec4 att; }; struct Material { vec4 ambient; vec4 diffuse; vec4 specular; float shineness; }; in vec4 aPos; in vec4 aNorm; uniform mat4 uMat; uniform Light light; uniform Material material; out vec4 vColor; void main() { vec4 vPos = uMat * aPos; vec4 vNorm = transpose(inverse(uMat)) * aNorm; vec3 N = normalize(vNorm.xyz); vec3 L = normalize(light.position.xyz - vPos.xyz); vec3 V = vec3(0.0f, 0.0f, 1.0f); vec3 R = reflect(-L,N); vec4 ambient = light.ambient * material.ambient; float d = length(light.position.xyz - vPos.xyz); float denom = light.att.x + light.att.y * d + light.att.z * d * d; vec4 diffuse = max(dot(L,N), 0.0) * light.diffuse * material.diffuse / denom; vec4 specular = pow(max(dot(R, V), 0.0), material.shineness) * light.specular * material.specular / denom; vColor = ambient + diffuse + specular; vPos.z *= -1; gl_Position = vPos; }
-
해결됨게임 개발자를 위한 3D 그래픽스, 쉐이더, OpenGL (3) - 애니메이션, depth 개념, Z 버퍼
glm-tri.cpp 의 glVertexAttribPointer 질문입니다.
glVertexAttribPointer(locPos, 4, GL_FLOAT, GL_FALSE, 0, glm::value_ptr(vertPos[0])); 위와 같은 형태로 소스코드에 배포가 되어있는데요. 삼각형이 출력되지 않아서 여러가지 확인해보면서 내용을 찾아보았습니다. 우선 glVertexAttribPointer 의 마지막 인자는 배열 내 데이터의 시작 지점(offset)을 나타내고, 이를 통해 GPU가 정점 데이터 배열에서 해당 속성(attribute)을 어디서부터 읽어야 할지 알게한다고 보았습니다. 소스 코드 상의 glm::value_ptr(vertPos[0]))은 vertPos[0]이라는 벡터의 메모리 주소를 반환 하므로, 오프셋 값을 나타낸다고 볼 수 없는 것 같아 다소 이해가 가지 않습니다. 또한 5번째 인자인 stride에 0 이 기입되는 것이 이해가 가지 않습니다.stride는 버텍스 데이터 배열 내에서 데이터들이 몇 개씩 한 덩어리인지를 나타내주는 인자로 이해했는데 0 이 아니라, sizeof(glm::vec4) 가 옳은 표현이 되는 것 아닌가요?? 실제로, glVertexAttribPointer(loc, 4, GL_FLOAT, GL_FALSE, sizeof(glm::vec4), (void*)0); 로 바꾸어 빌드했더니 삼각형이 올바르게 나왔습니다. 바쁘시겠지만 확인해주시면 감사하겠습니다.
-
해결됨게임 개발자를 위한 3D 그래픽스, 쉐이더, OpenGL (9) - 스텐실, 커브&서피스, glTF
vulkan 강의 일정
혹시 vulkan 강의는 언제쯤 계획하고 계신지 알 수 있을까요?
-
미해결게임 개발자를 위한 3D 그래픽스, 쉐이더, OpenGL (4) - 좌표 변환, 회전, 가상 트랙볼
외적 공식 문의
강사님 궁금한 점이 있어서 문의 드립니다. 외적 공식에 대해서 이 부분이 맞는지 확인 부탁 드립니다.제가 알고 있기론 가운데 j 행렬에서는 +가 아니라 - 부호가 되어야 맞는 것으로 알고 있는데 이 부분에 대해서 문의 드립니다. 제가 잘못알고 있는게 아닌지에 대해서 궁금해서 문의 드립니다.
-
해결됨게임 개발자를 위한 3D 그래픽스, 쉐이더, OpenGL (2) - 프로그래머블 파이프라인, 기하학 기초, 삼각형 출력
hello shader 프로그램 실행이 안됩니다.
강사님 제공된 코드를 실행을 해봤을 때 삼각형이 보이지 않고 빈 화면만 나오는 문제가 있습니다. 따로 glGenBuffers를 이용해서 버퍼를 생성하고 데이터를 바인딩을 했을 때에는 삼각형이 나오는 것을 확인을 했습니다. 이렇게 해결을 하는 것이 맞는지에 대해서 궁금합니다. 혹시 버퍼를 생성 하지 않고 진행을 하는 방법이 있는지 궁금합니다.
-
해결됨삼각형의 실전! Vulkan 중급
descriptorSet에 대한 질문들
안녕하세요?descriptorSet을 descriptorPool에서 할당 받아서 사용하는 이유가 뭔가요?@@@buffer와 memory에 대한 질문입니다. 예를 들면 device와 physicalDevice 처럼 buffer는 논리적인 개념이고 memory는 물리적인 개념인가요? @@@pipelineLayout을 생성할 때 info 구조체에 setLayoutCount 값을 설정합니다. pipelineLayout으로 생성하는 graphics pipeline은 1개 이고, 그 graphics pipeline을 구성하는 vtx-frm shader에는 몇 개의 uniform을 사용하는지 이미 고정되어 있는데요. 그러면 하나의 setLayoutCount만 사용하면 될 것 같은데, setLayoutCount를 따로 설정해주는 이유가 있나요?@@@descriptorSet은 이런 흐름으로 생성하고 사용하는 게 맞나요?- descriptorSetLayout으로 그래픽스 파이프라인에서 몇 개의 uniform이 사용될지 미리 알림- descriptorPool로 descriptorSet을 사용 가능한 할당- descriptorSet을 writeDescriptorSet으로 갱신해서 cpu->gpu로 데이터를 송부하는 용도로 사용하도록 설정 (readDescriptorSet는 검색해보니 없나보네요...ㅎㅎ)- 미리 uniform buffer를 업데이트 (render()의 1. 위치 정보 갱신)- vkCmdBindDescriptorSets() 을 호출하면 갱신된 위치 정보가 gpu에도 전송됨@@@opengl에 비해 무지 어렵네요 vulkan...ㅎㅎ;;
-
해결됨삼각형의 실전! Vulkan 중급
descriptorCount 에 대한 질문
안녕하세요? DescriptionSet, DescriptionSetLayout, DescriptionPool 등을 생성할 때 info 구조체에 descriptionCount를 강의에서는 항상 1로 설정하는데요. 이 값에 의미가 있나요? 즉, 이 값이 1이 아닌 경우가 있나요? 섹션 9-3의 Hello-Texture-Mapping 강의를 예로 들면, array<VkWriteDescriptorSet, 2> writeDescriptorSets{ VkWriteDescriptorSet{ .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, .dstSet = mDescriptorSet, .dstBinding = 0, .descriptorCount = 1, .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, .pBufferInfo = &descriptorBufferInfo }, VkWriteDescriptorSet{ .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, .dstSet = mDescriptorSet, .dstBinding = 1, .descriptorCount = 1, .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, .pImageInfo = &descriptorImageInfo } };이렇게 DescriptionSet을 갱신할 때 descriptorCount가 각각 1로 설정되고, 이 각각의 descriptor? 들은 dstBinding이라는 특정 binding index로 1:1로 mapping되는 것 같습니다. 이러면 count 값은 항상 1이 되어야할 것 같습니다. 섹션 8-1 Descriptor Pool 에서 maxSets와 DescriptorCount 간의 관계를 설명하실 때도 count값은 1로 설정되어 있습니다. 그래서 count에 설정되는 값이 1 이외일 경우가 무엇인지 잘 모르겠습니다.
-
해결됨삼각형의 실전! Vulkan 중급
질문이 있습니다.
질문 1)3개의 스왑 이미지를 할당 받는 상황입니다.하나는 출력용 프론트버퍼, 하나는 백버퍼,하나는 G 버퍼를 사용하기 위해 컬러 첨부로 정의했다고 가정하면추후 vkAcquireNextImageKHR 함수를 통해 렌더링할 프레임버퍼 인덱스를 가져오면..예를들어 G 버퍼는 첨부이니 프레젠테이션 엔진에서 알아서 인덱스를 제외해주고다음 렌더링에 필요한 프레임 버퍼 인덱스를 리턴해주는건가요 ?질문 2)렌더 패스 호환성의 대해서 제가 이해한 것이 맞는지 궁금합니다.렌더 패스 호환성은프레임버퍼를 생성할때 렌더패스를 인자로 넣게 되어 있다.VkCmdBeginRenderPass() 호출할때 프레임버퍼와 렌더패스를 둘다 넣게 되어있는데,이때 프레임버퍼에서 생성할때 넣은 렌더패스가 아닌 다른 렌더패스를 넣어도 된다는 의미.단 조건이 있는데 아래 2개,1) RenderPass의 AttachmentDescription VkFormat과 VkSampleCountFlagBits와 ImageView 생성시, VkImageViewCreateInfo 의 VkFormat과 VkSampleCountFlagBits 가 동일할때2) RenderPass의 pAttachment의 개수와 FrameBuffer의 pAttachment 개수가 동일할때
-
해결됨삼각형의 실전! Vulkan 중급
섹션2-6 vulkan device 질문
안녕하세요? Vulkan device를 통해 추상화함으로써 하드웨어 의존성을 벗어난다-> 코드에서는 mDevice를 vkCreateDevice로 생성하는데요. Logical 한 자원이라는 말은 gpu가 여러개 있지만(예를 들어서 인텔 내장그래픽카드, amd그래픽카드가 설치됨) 각 그래픽카드 마다 vkDeviceCreateInfo를 동일하게 설정할 수 있다는 의미인가요? 동일하게 설정된 구조체로 vkCreateDevice에 넣어서 vulkan device를 만들면 pysical device는 인텔, amd로 각각 다르지만 logical device로는 똑같다는 의미일까요?Queue Family는 그래픽카드에 queue가 여러개(강의에서는 graphics command processor, ace, dma 등)이 있다는 의미로 family이고, 큐라는 게 하드웨어 반도체 같은 건가요? 강의에서는 VK_QUEUE_GRAPHICS_BIT을 사용한 까닭은 graphics command processor라는 하드웨어 자원을 사용한다는 의미인가요?
-
해결됨삼각형의 실전! Vulkan 중급
섹션 4-2 command pool
안녕하세요? 강의 교안에서 command pool은 스레드 안정성이 보장되지 않는다고 말씀하셨는데 부연 설명이 없어서 질문드립니다.알고리듬에서 안정성 개념과 동일하게 스레드끼리의 ‘순서’를 유지하는 건가요?
-
해결됨삼각형의 실전! Vulkan 중급
windows에서 shaderc의 빌드 실패 문제 해결방법입니다
윈도우에서는 shaderc를 빌드하려고 하면unknown command: "create make: *** [Android.mk:77: obj/local/arm64-v8a/libshaderc_combined.a] Error 1라면서 오류가 발생합니다. 이를 해결하기 위해서는 Android.mk에서 45~51번째 줄을 아래 링크에서 제공하는 코드로 수정이 필요합니다.[Bug]: llvm-ar.exe error "unknown command" · Issue #1815 · android/ndk (github.com) 또한, CMakeLists에서도 빌드 명령에서 APP_STL:=<stl_version>에 무엇을 넣느냐에 따라서 libshaderc.a의 경로가 달라지기 때문에 수정이 필요할 수 있습니다.저는 뭘 넣어야 할지 몰라서 c++_shared를 사용했는데, 그러면, c++_shared라는 이름으로 폴더 이름이 만들어져 libshaderc.a를 링크하는 부분을 system에서 c++_shared로 변경해야합니다.
-
해결됨게임 개발자를 위한 3D 그래픽스, 쉐이더, OpenGL (5) - 3D 카메라 뷰잉, 프로젝션, MVP 변환
뷰포트 간의 z-index
안녕하세요.OpenGL 화면 내에서 다중창 기능을 구현을 하고 싶은데요.뷰포트들 간에 서로 영역이 겹쳤을 때 먼저 그려지고 나중에 그려지는 z-index 처리할 수 있는 방법이 따로 있나요?그리고 뷰포트 말고 OpenGL에서 다중창을 구현하는 특별한 방법이 있을까요?답변 부탁 드립니다.감사합니다.
-
해결됨게임 개발자를 위한 3D 그래픽스, 쉐이더, OpenGL (5) - 3D 카메라 뷰잉, 프로젝션, MVP 변환
scissor box에서의 테두리 라인 그리기
안녕하세요.예제에서 보면 scissor box 로 미니맵을 구분한 다음 glClearColor로 배경색상을 다르게 그렸는데요. 좀 더 구분이 명확해질 수 있게 scissor box 외곽선 테두리를 그리는 방법이 따로 있을까요? 만약 없다면 그냥 뷰포트 내부에서 외곽선 픽셀 계산해서 glDrawArrays함수로 GL_LINES 으로 그리면 될까요?답변 부탁 드립니다.감사합니다.
-
미해결삼각형의 실전! Vulkan 중급
코드는 어디서 얻을수있나요 ?
코드는 어디서 얻을수있나요 ?
-
해결됨OpenGL 쉐이더 (1) shader 3D 그래픽스 - 3D 그래픽스, OpenGL, 콜백 함수, 컬러 이론
Ubuntu 에서 라이브러리 설치 시 문제가 발생합니다.
학습 관련 질문 ❓ 을 남겨주세요. 상세히 작성하면 더 좋아요!출장이 잦아서, ✍ 답변에 시간이 좀 걸릴 수는 있습니다. 양해 바랍니다. 🏃 안녕하세요. 우분투로 수업을 듣고 있는 수강생입니다.다름이 아니라 glew 를 설치를 하고 폴더가 생성된 것도 확인을 했는데 파일을 실행하면 /usr/bin/ld: cannot find -lglew: No such file or directory위와 같은 에러가 발생합니다. 찾아봤는데 해결하는 방법을 모르겠어서 질문을 드립니다. 감사합니다.
주간 인기글
순위 정보를
불러오고 있어요