월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 게임 만들기 연습 문제 패키지
여러발의 탱크 구현 질문이 있습니다.
교수님 깃을 fork해서 multi bullet 구현을 해보았습니다. unique_ptr를 이용해서 구역을 벗어나면 해당 unique_ptr를 reset해서 delete하게 구현했습니다. 구현간에 궁금한 점이 있습니다. 질문 1) https://github.com/shonjiho/GameDevPracticePackage/blob/master/Chapter1/Lecture1/TankExample.h#L74-L76 화면을 벗어났는지 범위를 체크하는함수를 isOutMap으로 구현했는데 Game2D Class의 width와 height와는 다른 단위(?)를 가진 것 같아서 할 수 없이 매직넘버를 어림잡아 넣게되었습니다. 어떤 값을 참고해서 범위를 재지정해야할가요?OpenGL만의 그려지는 단위가 따로 있나요? 의문 1) https://github.com/shonjiho/GameDevPracticePackage/blob/master/Chapter1/Lecture1/TankExample.h#L89-L90 unique_ptr를 한정된 개수로 모아놓은 vector<unique_ptr<MyBullet>> bullets 으로 총알을 모아놓고 재활용하고 있습니다. 이렇게 렌더링하는 부분에서 반복문을 통해서 하나씩 비어있는지 체크하는 방식이 맞는 방식일가요?
- 해결됨홍정모의 게임 만들기 연습 문제 패키지
초반 세팅 방법 정리.(삽질 공유)
프로젝트 세팅간에 해매시는분들을 위해 기록 남기겠습니다. 우선, 첫번째 github 링크찾는데 꽤 걸렸습니다.어디에 올라와있는지 몰랏는데 홍정모교수님 블로그에서 GameDevPracticePackage 라는 키워드를 보고 깃허브에 검색해서 찾았습니다. r위 remote repository를 clone했습니다. vcpkg install opengl 를 통해 opengl를 설치했지만 해결되지않았습니다. 하지만 코드를 들여다보면 opengl이라는 패키지가 아니라glew, glfw3 를 설치해야합니다. 아래와 같이요. vcpkg install glew:x64-windows vcpkg install glfw3:x64-windows vcpkg integrate install // visual studio 인클루드에 반영 그러면 위와 같이 해결됐습니다. 문제 해결과정에 깨달은게 OpenGL은 하나의 표준이더군요. 언어마다 그에 해당하는 패키지이름을 정확히 인지하는게 중요한 것 같습니다.
- 미해결홍정모의 게임 만들기 연습 문제 패키지
실행 순서에 대해 질문 입니다 !
안녕하세요 ! 1-3 상호작용 맛보기 - 키보드 입력과 반응 해당 강의의 연습문제로 내주신 WalkingPerson.h 에 대한 질문과 1-2 기본적인 그리기 - 이동, 회전, 애니메이션 해당 강의의 '태양계 공전,자전 구현' 연습문제 질문입니다. 아래는 제가 푼 태양계 연습문제 답안입니다. 보시기 좀 지저분 하실 것 같아 죄송하지만 ㅠㅠ 노란색 하이라이터는 제가 이해한 실행 순서와 그에 따른 과정을 필기해놓은 것입니다. 그려지고 회전하고 평행이동 하는 그런 함수들이 코드상의 순서와는 다르게 역순으로 실행된다고 하셔서 이렇게 순서를 짜고 풀었습니다. 1.원점에 달이 먼저 그려지고 2. 달이 평행이동하고 (0.2, 0.0) 3. 달이 원점에 대해 time * 90 도로 회전하고 4. 원점에 지구가 그려지고 (그래서 원점에 있는 지구를 달이 공전하는 모습이 되고) 5. 지구와 달이 함께 평행이동하여 지구는 (0.5, 0.0) 달은 (0.7, 0.0) 좌표를 가지고 6. 원점에 별이 그려지고 7. 별은 원점에서, 지구는 (0.5, 0.0) 에서 time * 45 도로 회전하고 실행 결과도 알맞게 나와서 이 순서로 실행되는 것이 맞구나하고 이해했었습니다. 그런데 WalkingPerson.h 코드를 보니 노란 팔이 몸통 위에 그려지고 초록다리 또한 몸통 위에 그려지는 것을 보아하니 이 순서대로 그림이 그려지는 것 같더라구요. 눈 또한 얼굴 위에 그려진 것을 보니 얼굴보다 나중에 그려지는 것 같습니다. 이건 또 역순이 아닌 그냥 원래 코드 순서대로 그려지니까 혼란이 옵니다.. ! 태양계 연습문제와 걷는 사람 연습문제에서 제가 잘 못 이해하고 있는 부분들 알려주셨으면 좋겠습니다 ㅠㅠ 또 두 연습문제엣서 올바른 실행 순서는 어떻게 될지 궁금합니다.
- 미해결홍정모의 게임 만들기 연습 문제 패키지
탱크예제에 포탄 발사소리
연습문제 중에 탱크예제에 포탄발사 소리를 넣으려고 하는데 해당 강의에서 배운 내용을 바탕으로 bulletSound()라는 함수를 만들고 if (isKeyPressedAndReleased(GLFW_KEY_SPACE)) { for (int i = 0; i < 5; ++i) { if (bullet[i]==nullptr) { bullet[i] = new MyBullet; bulletSound(); bullet[i]->center = tank.center; bullet[i]->center.x += 0.2f; .... 이런식으로 스페이스바 누르면 총알 나가는 구조 안에 bulletSound()를 추가했습니다. 그런데 이렇게하면 bulletSound() 함수 안의 while문(노래끝났으면 break;) 때문에 효과음이 끝나고나서야 총알이 발사가 됩니다. bulletSound()함수를 뒤에 위치시켜도 똑같은 결과가 나오구요. while문을 없애면 소리가 안나오고, if(!playing) break; 조건을 없애서 while(true) { system->update(); } 로 하자니 무한반복으로 계속 돌고 어떤 방법을 이용해야 총알과 소리가 같이 나올 수 있을까요 제가 놓치고 있는게 뭔지 알려주시면 감사하겠습니다.
- 미해결홍정모의 게임 만들기 연습 문제 패키지
사운드 loop off와 pause, resume
질문을 다른데에 잘못 올려서 다시 올립니다. 11분 33초 즈음 loop off 상태일때 바로 1을 눌러서 반응이 없다고 하시면서 loop normal로 바꾸시고 0, 1 누르고 일시정지와 재생 확인해주셨습니다. loop off 상태일때도 0누르면 일시정지, 1누르면 다시 재생이 되는데요, loop off일때 일시정지 안한상태로 1누르셔서 반응이 없었던 건가요?? loop normal일때도 1만 누르면 반응이 없는데 착오가 있던 것인지 이 부분 확인 부탁드립니다. 그리고 만약 그렇다면 loop off와 normal의 차이는 resume 기능이 되고 안되고가 아니라 단순히 사운드가 반복이 되고 안되고의 차이인 건가요?
- 홍정모의 게임 만들기 연습 문제 패키지
사운드 loop off와 pause, resume
삭제된 글입니다
- 미해결홍정모의 게임 만들기 연습 문제 패키지
애니메이션을 구현해 보고싶어요..
특정 동작 시쿼스가 전부 그려져 있는 스프라이트를 로드시킨다음, 매 프레임마다 스프라이트의 출력위치를 바꿔가며 애니매이션을 구현해보려고 하는데요.. opengl로 도대체 어떻게 해야하는지 모르겟어요 ㅜㅜ.. glTextureSubImage2D 함수를 사용해서, 텍스쳐에 스프라이트의 일부분만 지정할수 있다고 하는데.. 어떻게 하면 될지 감이 안잡힙니다..
- 미해결홍정모의 게임 만들기 연습 문제 패키지
walkingperson 예제에서 사람을 여러 사람 만들고 움직이는 걸 못하겟습니다 ㅠㅠ
안녕하세요! walkingperson 예제를 하는데 todo list에서 사람을 클래스화해서 여러 사람을 만드는건 성공 했습니다.. 그런데 여러 사람을 만들고 여서 사람의 팔다리를 움직이는 걸 도저히 모르겟습니다....ㅠㅠ 사람을 그릴때 rotate만 따로 빼는건 말이 안되고 그렇다고 rotate를 클래스 안에 넣자니 1프레임 움직이고 안움직입니다 ㅠㅠ 어텋게 접근해야 하는지 감이 안잡힙니다 ㅠㅠ
- 미해결홍정모의 게임 만들기 연습 문제 패키지
실행 문제.
opengl 사용법을 보고 다정확하게 깔았는데 이부분만 빨간색으로 표시가 나타납니다. 혹시 몰라 다운받은 파일에 glew,glfw파일이 있는지도 봤는데 파일도 다있는 상태입니다. 파일 소스를 열수 없다는 에러는 왜 뜨는 걸까요? 답변주시면 감사드립니다
- 미해결홍정모의 게임 만들기 연습 문제 패키지
연습문제 답?
https://blog.naver.com/atelierjpro/221413483005 링크에서 해보라고 하시던 문제들 혹시 답같은게 따로 있을까요??
- 해결됨홍정모의 게임 만들기 연습 문제 패키지
태양, 지구, 달 실습과제 질문드립니다
삭제된 글입니다
- 해결됨홍정모의 게임 만들기 연습 문제 패키지
강의 내용 코드를 github에 올려도 될까요?
삭제된 글입니다
- 미해결홍정모의 게임 만들기 연습 문제 패키지
빌드 실패. 오류: 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.
제가 github에서 gamepackage을 로드(불러와서)해서 파일을 가져온 후에 main.cpp에서 빌드를 처음 시켜봤는데요 거기서 빌드 실패. 오류: 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.이게 뜨면서 그 강의에서 보이는 것처럼 하얀 창이 뜨지 않네요 제가 opengl떄문인가 싶어서 opengl도 깔아놨는데도 안되요 ㅠㅠㅠㅠㅠ 혹시 opengl이 제대로 깔리지 않은건가요??
- 해결됨홍정모의 게임 만들기 연습 문제 패키지
탱크 문제
안녕하세요. 강의를 듣고있는 학생입니다. 탱크 연습문제를 구현한 곳에서 질문사항이 있습니다. ESC 버튼을 눌러 프로그램을 종료 시킬 때마다 다음과 같은 오류가 나오고 있습니다. 어떻게 해야할까요? ㅠㅠ 제가 원하는 결과는 잘 나오는 것같은데... 작성한 소스코드는 다음과 같습니다. // 탱크와 총알 클래스 // update가 구현되어있는 탱크게임 클래스 바쁘신 와중에도 질문을 하게 되어 죄송합니다. 유튜브도 잘 보고있어요 ! :D
- 미해결홍정모의 게임 만들기 연습 문제 패키지
if (vel_rel.getDotProduct(normal) < 0.0f) 이부분이 이해가 안갑니다...
저 조건문이 두공이 서로 가까이가고 있을때 조건문이라고 하셨는데 근대 제가 아무리 생각하고 머리를 굴려도 상대조건에다가 방향노말벡터를 곱해야되는지 이해가 안갑니다. 그냥 상대속도가 0보다 크면 서로 가까이 가고 있는거 아닌가요? 공의 움직임에 대한 케이스를 전부다 생각해봐도 왜 저렇게 조건을 하셨는지 도저히 이해가안갑니다.... 왜 그런지 좀 알려주실수 있으신가요
- 미해결홍정모의 게임 만들기 연습 문제 패키지
예제 다운로드 받고 바로 실행하는데 빌드 실패 뜨는데 어떻게 해결해야하나요 ?
예제 다운로드 받고 바로 실행하는데 빌드 실패 뜨는데 어떻게 해결해야하나요 ?\ 2015년 비주얼 스튜디오로 실행하면>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Platform.targets(57,5): error MSB8020: The build tools for v141 (Platform Toolset = 'v141') cannot be found. To build using the v141 build tools, please install v141 build tools. Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Retarget solution". 이렇게 오류가 뜨네요 ㅠ 2019년 비주얼 스튜디오로 실행해면 1>DrawFunctions.obj : error LNK2019: __imp_glBegin 외부 기호(참조 위치: "void __cdecl jm::drawFilledBox(class jm::RGB const &,float const &,float const &)" (?drawFilledBox@jm@@YAXAEBVRGB@1@AEBM1@Z) 함수)에서 확인하지 못했습니다. 1>DrawFunctions.obj : error LNK2019: __imp_glColor3fv 외부 기호(참조 위치: "void __cdecl jm::drawFilledBox(class jm::RGB const &,float const &,float const &)" (?drawFilledBox@jm@@YAXAEBVRGB@1@AEBM1@Z) 함수)에서 확인하지 못했습니다. 1>DrawFunctions.obj : error LNK2019: __imp_glEnd 외부 기호(참조 위치: "void __cdecl jm::drawFilledBox(class jm::RGB const &,float const &,float const &)" (?drawFilledBox@jm@@YAXAEBVRGB@1@AEBM1@Z) 함수)에서 확인하지 못했습니다. 1>DrawFunctions.obj : error LNK2019: __imp_glLineWidth 외부 기호(참조 위치: "void __cdecl jm::setLineWidth(int const &)" (?setLineWidth@jm@@YAXAEBH@Z) 함수)에서 확인하지 못했습니다. 1>DrawFunctions.obj : error LNK2019: __imp_glPointSize 외부 기호(참조 위치: "void __cdecl jm::drawPoint(class jm::RGB const &,class jm::Vector2<float> const &,float const &)" (?drawPoint@jm@@YAXAEBVRGB@1@AEBV?$Vector2@M@1@AEBM@Z) 함수)에서 확인하지 못했습니다. 1>DrawFunctions.obj : error LNK2019: __imp_glPopMatrix 외부 기호(참조 위치: "void __cdecl jm::endTransformation(void)" (?endTransformation@jm@@YAXXZ) 함수)에서 확인하지 못했습니다. 1>Game2D.obj : error LNK2001: __imp_glPopMatrix 외부 기호를 확인할 수 없습니다. 1>DrawFunctions.obj : error LNK2019: __imp_glPushMatrix 외부 기호(참조 위치: "void __cdecl jm::beginTransformation(void)" (?beginTransformation@jm@@YAXXZ) 함수)에서 확인하지 못했습니다. 1>Game2D.obj : error LNK2001: __imp_glPushMatrix 외부 기호를 확인할 수 없습니다. 1>DrawFunctions.obj : error LNK2019: __imp_glRotatef 외부 기호(참조 위치: "void __cdecl jm::rotate(float const &)" (?rotate@jm@@YAXAEBM@Z) 함수)에서 확인하지 못했습니다. 1>DrawFunctions.obj : error LNK2019: __imp_glScalef 외부 기호(참조 위치: "void __cdecl jm::scale(float const &,float const &)" (?scale@jm@@YAXAEBM0@Z) 함수)에서 확인하지 못했습니다. 1>DrawFunctions.obj : error LNK2019: __imp_glTranslatef 외부 기호(참조 위치: "void __cdecl jm::translate(float const &,float const &)" (?translate@jm@@YAXAEBM0@Z) 함수)에서 확인하지 못했습니다. 1>DrawFunctions.obj : error LNK2019: __imp_glVertex2f 외부 기호(참조 위치: "void __cdecl jm::drawFilledBox(class jm::RGB const &,float const &,float const &)" (?drawFilledBox@jm@@YAXAEBVRGB@1@AEBM1@Z) 함수)에서 확인하지 못했습니다. 1>DrawFunctions.obj : error LNK2019: __imp_glVertex2fv 외부 기호(참조 위치: "void __cdecl jm::drawFilledStar(class jm::RGB const &,float const &,float const &)" (?drawFilledStar@jm@@YAXAEBVRGB@1@AEBM1@Z) 함수)에서 확인하지 못했습니다. 1>Game2D.obj : error LNK2019: __imp_glBlendFunc 외부 기호(참조 위치: "public: class jm::Game2D & __cdecl jm::Game2D::init(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int const &,int const &,bool const &,int const &)" (?init@Game2D@jm@@QEAAAEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBH1AEB_N1@Z) 함수)에서 확인하지 못했습니다. 1>Game2D.obj : error LNK2019: __imp_glClear 외부 기호(참조 위치: "public: void __cdecl jm::Game2D::run(void)" (?run@Game2D@jm@@QEAAXXZ) 함수)에서 확인하지 못했습니다. 1>Game2D.obj : error LNK2019: __imp_glClearColor 외부 기호(참조 위치: "public: void __cdecl jm::Game2D::run(void)" (?run@Game2D@jm@@QEAAXXZ) 함수)에서 확인하지 못했습니다. 1>Game2D.obj : error LNK2019: __imp_glEnable 외부 기호(참조 위치: "public: class jm::Game2D & __cdecl jm::Game2D::init(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int const &,int const &,bool const &,int const &)" (?init@Game2D@jm@@QEAAAEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBH1AEB_N1@Z) 함수)에서 확인하지 못했습니다. 1>Game2D.obj : error LNK2019: __imp_glHint 외부 기호(참조 위치: "public: class jm::Game2D & __cdecl jm::Game2D::init(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int const &,int const &,bool const &,int const &)" (?init@Game2D@jm@@QEAAAEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBH1AEB_N1@Z) 함수)에서 확인하지 못했습니다. 1>Game2D.obj : error LNK2019: __imp_glMatrixMode 외부 기호(참조 위치: "public: void __cdecl jm::Game2D::run(void)" (?run@Game2D@jm@@QEAAXXZ) 함수)에서 확인하지 못했습니다. 1>Game2D.obj : error LNK2019: __imp_glOrtho 외부 기호(참조 위치: "public: class jm::Game2D & __cdecl jm::Game2D::init(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int const &,int const &,bool const &,int const &)" (?init@Game2D@jm@@QEAAAEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBH1AEB_N1@Z) 함수)에서 확인하지 못했습니다. 1>Game2D.obj : error LNK2019: __imp_glViewport 외부 기호(참조 위치: "public: class jm::Game2D & __cdecl jm::Game2D::init(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int const &,int const &,bool const &,int const &)" (?init@Game2D@jm@@QEAAAEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBH1AEB_N1@Z) 함수)에서 확인하지 못했습니다. 1>C:\Users\김시헌\Desktop\GameDevPracticePackage20181206 (1)\Chapter1\Lecture1\x64\Debug\Lecture1.exe : fatal error LNK1120: 20개의 확인할 수 없는 외부 참조입니다. 이렇게 뜨는데 아직 시작도 안했는데 이렇게 되서 골치가 아프네요 ㅠ
- 미해결홍정모의 게임 만들기 연습 문제 패키지
총알이 여러발 나가도록 하려고 하는데 잘안됩니다...
void update() override { // move tank if (isKeyPressed(GLFW_KEY_LEFT))tank.center.x -= 0.5f * getTimeStep(); if (isKeyPressed(GLFW_KEY_RIGHT))tank.center.x += 0.5f * getTimeStep(); if (isKeyPressed(GLFW_KEY_UP))tank.center.y += 0.5f * getTimeStep(); if (isKeyPressed(GLFW_KEY_DOWN))tank.center.y -= 0.5f * getTimeStep(); // shoot a cannon ball if (isKeyPressedAndReleased(GLFW_KEY_SPACE)) { bullet = new MyBullet; bullet->center = tank.center; bullet->center.x += 0.2f; bullet->center.y += 0.1f; bullet->velocity = vec2(0.5f, 0.0f); if (bullet1 == nullptr)bullet1 = bullet; bullet = bullet->prev; } if (bullet1 != nullptr && (bullet1->velocity - bullet1->center) > 5) { bullet1 = bullet1->prev; } bullet_update = bullet1; while (bullet_update != nullptr) { bullet_update->update(getTimeStep()); bullet_update->draw(); bullet_update = bullet_update->prev; } // rendering tank.draw(); /*if (bullet1!= nullptr) { bullet1->draw(); }*/ } }; 우선 vec2에 대해서 오버로딩 시켜서 벡터 거리 값을 구해서 상수와 크기비교시킬수있도록 해놨습니다. 그래서 그 거리값을 기준으로 총알이 딜리트 시키도록 하려고 했습니다. 그후 리스트 형식을 이용하려고 총알 클래스에 총알 포인트 변수를 넣었고 이를 이용해서 스페이스바를 누르면 총알의 포인트는 총알이전 주소값 현재는 아무 주소값이 없으니깐 nullptr값으로 이동하게되고 이후 다시 스페이스바를 누르면 bullet->prev에 새로운 bullet 클래스를 만들고 여기에 다시 값을 주고 되고 반복하게 하고 제일처음 bullet값을 다른 bullet 클래스 변수 bullet1에 넣어서 이 변수가 조건이 만족되어 delete가 되면 이전변수로 넘어가게 되고 업데이트는 와일문으로 bullet1값에 있는 이전 변수 클래스들을 다 반복문 돌려서 업데이트 시키면서 draw까지 시키려고 했구요 근대 이렇게 생각해서 구현해보니깐 총알이 하나밖에 안나가고 그 총알 하나가 사라져야지 다른 총알이 나오게 됩니다. 뭐가 잘못된지 잘모르겠어서 그런데 좀 어디가 문제인지 알려주실수 있으신가요 너무 어렵네요....
- 미해결홍정모의 게임 만들기 연습 문제 패키지
13분 30초쯤에 메모리누수가 생긴다는게 잘이해가 안가네요
포탄을 쏘고 움직이고 포탄을 쏘면 메모리 릭이 생기신다고 하셨는데 왜 메모리릭이 생기는지 잘이해가 안갑니다. 15분에서 힌트 주신다면서 총알이 있는 상태에서 또 스페이스를 누르면 원래 나가던 총알이 딜리트가 안된상태에서 뉴 불릿으로 새롭게 만들어지면서 메모리릭이 생기게 된다 이 이유 때문인건가요? 아니면 다른 문제 인건가요? 그리고 혹시 이런 부분에서 메모리 릭이 실시간으로 나고있는지 아닌지 확인 하는 방법이 따배c++에서 비쥬얼 스튜디오로 프로파일링 하기 이부분을 참고하면 되는건가요?
- 미해결홍정모의 게임 만들기 연습 문제 패키지
예제 다운로드 방법을 모르겠습니다.
예제는 어떻게 다운 받나요??
- 미해결홍정모의 게임 만들기 연습 문제 패키지
따베C++강의가 없는 사람을 위해서 OpenGL 설치법에 대해서 알려주실수 있을까요?
vcpkg 사용법은 다음 링크를 참고했습니다. https://upglay.tistory.com/12 cmd에서 vcpkg를 콘솔명령어로 실행한 캡쳐본입니다. 잘 안되기에 직접 구글링을 통해서 적용을 해보려고 해도 OpenGL 홈페이지의 파일 배포 내용이 예전과 달라진부분이 많아서 라이브러리 적용에 어려움이 많습니다 ㅜㅜ.. 강의에서 사용한 opengl, glew, glfw3 세 가지 라이브러리의 버전도 알려주시면 감사합니다. +) 비주얼 스튜디오 언어팩 업데이트로 해결되었습니다.