'기타 > 링크' 카테고리의 다른 글
3D 툴 (0) | 2022.11.01 |
---|---|
C#으로 OpenGL 및 ImGUI 학습 2.5개월 경과 쇼케이스 (0) | 2022.10.31 |
주식 결손금 관련 기사 (0) | 2022.10.21 |
html, css, js 코드 블로그에 넣기 (0) | 2022.09.12 |
jquery plugin 검색 사이트 (0) | 2022.09.10 |
3D 툴 (0) | 2022.11.01 |
---|---|
C#으로 OpenGL 및 ImGUI 학습 2.5개월 경과 쇼케이스 (0) | 2022.10.31 |
주식 결손금 관련 기사 (0) | 2022.10.21 |
html, css, js 코드 블로그에 넣기 (0) | 2022.09.12 |
jquery plugin 검색 사이트 (0) | 2022.09.10 |
프로그램 및 코드 다운로드
주요 코드는 아래와 같습니다.
#pragma once
#include "GlRender.h"
class RenderEBO_VAO_VBO : public GlRender
{
public:
RenderEBO_VAO_VBO();
~RenderEBO_VAO_VBO();
private:
void GlInit() override;
void GlDraw() override;
float vertices[4] = {
0,10,
200, 110
};
float vertices2[4] = {
0,20,
200, 120
};
GLuint VAO;
GLuint VAO2;
GLuint VBO;
GLuint VBO2;
GLuint EBO;
GLuint VAO3;
GLuint VBO3;
float vertices3[12] = {
50.5f, 50.5f, 0.0f, // 우측 상단
50.5f, -50.5f, 0.0f, // 우측 하단
-50.5f, -50.5f, 0.0f, // 좌측 하단
-50.5f, 50.5f, 0.0f // 좌측 상단
};
unsigned int indices[6] = { // 0부터 시작한다는 것을 명심하세요!
0, 1, 3, // 첫 번째 삼각형
1, 2, 3 // 두 번째 삼각형
};
};
아래 코드에서는 VAO + VBO를 2개 만들어서 2개의 라인을 그립니다.
그리고 EBO + VAO + VBO를 사용하여 정점 좌표를 인덱싱하여 순서를 변경 합니다.
위에 헤더의 indices를 주목해 주세요.
0~4 사이의 순서를 변경하면 LINE_STRIP 그리는 위치가 바뀌게 됩니다.
void RenderEBO_VAO_VBO::GlInit()
{
/***************************************************************************************
* VAO + VBO 1번째
**************************************************************************************/
// VAO 생성 및 바인딩
glGenVertexArrays(1, &VAO); // 1.할당 (앞에 인자는 1개 의미)
glBindVertexArray(VAO);
// VBO
// 1. Gen(할당) -> 2. Bind(바인딩) -> 3. Data(입력) -> 4. Link 순서로 사용
glGenBuffers(1, &VBO); // 1.할당 (앞에 인자는 1개 의미)
glBindBuffer(GL_ARRAY_BUFFER, VBO); // 2. GL_ARRAY_BUFFER 형식 바인딩 (이 버퍼 말고도 종류가 많음)
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STREAM_DRAW); // 3.데이터 복사 및 크기 설정
///GL_STATIC_DRAW: 데이터가 거의 변하지 않습니다.
///GL_DYNAMIC_DRAW: 데이터가 자주 변경됩니다.
///GL_STREAM_DRAW: 데이터가 그려질때마다 변경됩니다.
// 4. Link Vertex Attribute
int location = 0;
glVertexAttribPointer(location, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GL_FLOAT), (void*)0);
glEnableVertexAttribArray(location);
/***************************************************************************************
* VAO + VBO 2번째
**************************************************************************************/
// VAO 생성 및 바인딩
glGenVertexArrays(1, &VAO2); // 1.할당 (앞에 인자는 1개 의미)
glBindVertexArray(VAO2); // VAO를 OpenGL context에 연결(bind)
// VBO
// 1. Gen(할당) -> 2. Bind(바인딩) -> 3. Data(입력) -> 4. Link 순서로 사용
glGenBuffers(1, &VBO2); // 1.할당 (앞에 인자는 1개 의미)
glBindBuffer(GL_ARRAY_BUFFER, VBO2); // 2. GL_ARRAY_BUFFER 형식 바인딩 (이 버퍼 말고도 종류가 많음)
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices2), vertices2, GL_STREAM_DRAW); // 3.데이터 복사 및 크기 설정
///GL_STATIC_DRAW: 데이터가 거의 변하지 않습니다.
///GL_DYNAMIC_DRAW: 데이터가 자주 변경됩니다.
///GL_STREAM_DRAW: 데이터가 그려질때마다 변경됩니다.
// 4. Link Vertex Attribute
glVertexAttribPointer(location, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GL_FLOAT), (void*)0);
glEnableVertexAttribArray(location);
/***************************************************************************************
* EVO + VAO + VBO
**************************************************************************************/
// VAO 생성 및 바인딩
glGenVertexArrays(1, &VAO3); // 1.할당 (앞에 인자는 1개 의미)
glBindVertexArray(VAO3); // VAO를 OpenGL context에 연결(bind)
// VBO
// 1. Gen(할당) -> 2. Bind(바인딩) -> 3. Data(입력) -> 4. Link 순서로 사용
glGenBuffers(1, &VBO3); // 1.할당 (앞에 인자는 1개 의미)
glBindBuffer(GL_ARRAY_BUFFER, VBO3); // 2. GL_ARRAY_BUFFER 형식 바인딩 (이 버퍼 말고도 종류가 많음)
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices3), vertices3, GL_STREAM_DRAW); // 3.데이터 복사 및 크기 설정
// OpenGL이 사용하기 위해 인덱스 리스트를 element 버퍼에 복사
glGenBuffers(1, &EBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STREAM_DRAW);
///GL_STATIC_DRAW: 데이터가 거의 변하지 않습니다.
///GL_DYNAMIC_DRAW: 데이터가 자주 변경됩니다.
///GL_STREAM_DRAW: 데이터가 그려질때마다 변경됩니다.
// Link Vertex Attribute
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
}
void RenderEBO_VAO_VBO::GlDraw()
{
glViewport(0, 0, gl_window_width, gl_window_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho((double)-gl_window_width / 2, (double)gl_window_width / 2,
(double)-gl_window_height / 2, (double)gl_window_height / 2,
1, -1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0, 0, 0, 0);
glBindVertexArray(VAO); // 한 줄로 끝!
glColor4f(0, 1, 0, 1);
glDrawArrays(GL_LINES, 0, 2);
glBindVertexArray(VAO2); // 한 줄로 끝!
glColor4f(0, 0, 1, 1);
glDrawArrays(GL_LINES, 0, 2);
glBindVertexArray(VAO3); // 한 줄로 끝!
glColor4f(0, 0, 1, 1);
glDrawElements(GL_LINE_STRIP, 6, GL_UNSIGNED_INT, 0); // EBO 사용 시 glDrawElements로 출력
}
Opengl Shader Program Disable (0) | 2022.11.29 |
---|---|
OpenGL 강좌2 - VBO (VertexBufferObject) (0) | 2022.10.26 |
OpenGL 강좌1 - MFC 윈도우창에 띄우기 (32비트, 64비트 설정 포함) 및 예제코드 (1) | 2022.09.30 |
OpenGl SuperBible 6 [예제 3-9] 지오메트리 쉐이더 (0) | 2020.07.27 |
OpenGl SuperBible 6 [예제 3-8] 테셀레이션 이벨류에이션 쉐이더 (0) | 2020.07.27 |
프로그램 및 코드 다운로드
주요 코드는 아래와 같습니다.
Header
class RenderVBO : public GlRender
{
public:
RenderVBO();
~RenderVBO();
GLuint VBO;
float vertices[8] = {
0,10,
200, 110,
-0,-10,
-200,-110
};
private:
void GlInit() override;
void GlDraw() override;
};
CPP
void RenderVBO::GlInit()
{
// 1. Gen(할당) -> 2. Bind(바인딩) -> 3. Data(입력) -> 4. Link 순서로 사용
glGenBuffers(1, &VBO); // 1.할당
glBindBuffer(GL_ARRAY_BUFFER, VBO); // 2. GL_ARRAY_BUFFER 형식 바인딩 (이 버퍼 말고도 종류가 많음)
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices) /* Byte 크기*/ , &vertices[0], GL_STREAM_DRAW); // 3.데이터 복사 및 크기 설정
///GL_STATIC_DRAW: 데이터가 거의 변하지 않습니다.
///GL_DYNAMIC_DRAW: 데이터가 자주 변경됩니다.
///GL_STREAM_DRAW: 데이터가 그려질때마다 변경됩니다.
// 4. Link Vertex Attribute
int location = 0;
// 파라미터 : location, 크기, 데이터 형태(float 등), Normalize 여부, 한점 BYTE 크기 (0이면 자동 계산), 시작 인덱스
glVertexAttribPointer(location, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GL_FLOAT), (void*)0);
glEnableVertexAttribArray(0);
}
VBO를 사용하기 위해서는 아래순서로 사용합니다. 꼭 기억해두세요.
1. Gen(할당) -> 2. Bind(바인딩) -> 3. Data(입력) -> 4. Link 순서로 사용
void RenderVBO::GlDraw()
{
glViewport(0, 0, gl_window_width, gl_window_height);
glLoadIdentity();
glOrtho((double)-gl_window_width / 2, (double)gl_window_width / 2,
(double)-gl_window_height / 2, (double)gl_window_height / 2,
1, -1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0, 0, 0, 0);
glColor4f(0, 1, 0, 1);
// 중요! 단독으로 VBO만 사용시 VBO버퍼에 마지막으로 입력된 데이터가 출력됨
// 만약 여러 데이터를 입력하려면 VAO를 같이 사용해야 함(다음 예제 참조)
glDrawArrays(GL_LINES, 0, 2); // glBegin(GL_LINES); 처럼 쓰면됨 GL_POINTS 등등
}
glDrawArrays로 버퍼에 저장된 데이터를 출력하였습니다.
Opengl Shader Program Disable (0) | 2022.11.29 |
---|---|
OpenGL 강좌3 - EBO + VAO + VBO (0) | 2022.10.26 |
OpenGL 강좌1 - MFC 윈도우창에 띄우기 (32비트, 64비트 설정 포함) 및 예제코드 (1) | 2022.09.30 |
OpenGl SuperBible 6 [예제 3-9] 지오메트리 쉐이더 (0) | 2020.07.27 |
OpenGl SuperBible 6 [예제 3-8] 테셀레이션 이벨류에이션 쉐이더 (0) | 2020.07.27 |
C#으로 OpenGL 및 ImGUI 학습 2.5개월 경과 쇼케이스 (0) | 2022.10.31 |
---|---|
3D 모델 사이트 (0) | 2022.10.28 |
html, css, js 코드 블로그에 넣기 (0) | 2022.09.12 |
jquery plugin 검색 사이트 (0) | 2022.09.10 |
CSS 애니메이션(Animation) 실제로 어떻게 쓰나? (0) | 2022.09.03 |
오늘은 부산광역시 중앙동에 있는 이정태 본참치 입니다.
주소: 부산 중구 해관로 73
전화번호 : 051-463-3737
영업시간: 11:30 ~22:30
브레이크타임: 14:30 ~17:00
참치 외에도 점심특선 초밥 등 맛있는 일식집 입니다. ㅎ
글쓰는데도 군침이 다시...
일식을 드시고 싶으시면 꼭한번 방문해보시길 ㅎ
부산 수영 금손 1983 (오마카세) (0) | 2022.11.25 |
---|---|
부산 - 수영산8193 (0) | 2022.09.29 |
부산 - 소수인 (0) | 2022.09.15 |
김해 장유 모산 [ 오마카세 ] (0) | 2022.08.25 |
부산 파라다이스호텔 사까에 (0) | 2022.08.25 |
#pragma once
#include "GlRender.h"
class RenderTest : public GlRender
{
public:
RenderTest();
~RenderTest();
private:
void GlInit() override;
void GlDraw() override;
};
헤더는 GlRender를 상속받습니다.
GlRender 클래스에 가상함수로 호출되기 때문에 GlInit(), GlDraw() 함수는 오버라이드!
#include "stdafx.h"
#include "RenderTest.h"
RenderTest::RenderTest(){}
RenderTest::~RenderTest(){}
void RenderTest::GlInit(){}
void RenderTest::GlDraw()
{
glViewport(0, 0, gl_window_width, gl_window_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho((double)-gl_window_width / 2, (double)gl_window_width / 2,
(double)-gl_window_height / 2, (double)gl_window_height / 2,
1, -1);
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0, 0, 0, 0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glPushMatrix();
{
glBegin(GL_LINES);
glColor4f(0, 1, 0, 1);
glVertex2d(0, 0);
glVertex2d(200, 100);
glEnd();
}
glPopMatrix();
glDisable(GL_BLEND);
glMatrixMode(GL_MODELVIEW);
glMatrixMode(GL_PROJECTION);
}
#pragma comment ( lib, "OpenGL32.lib" )
#ifdef _WIN32
#include "OpenGL_lib/core/x86/glew.h"
#include "OpenGL_lib/core/x86/wglew.h"
#endif
#ifdef _WIN64
#include "OpenGL_lib/core/x64/glew.h"
#include "OpenGL_lib/core/x64/wglew.h"
#endif
RenderTest m_render_test;
m_render_test.Create(this);
m_render_test.GlStart();
m_render_test.GlResize(cx, cy);
m_render_test.GlClose();
OpenGL 강좌3 - EBO + VAO + VBO (0) | 2022.10.26 |
---|---|
OpenGL 강좌2 - VBO (VertexBufferObject) (0) | 2022.10.26 |
OpenGl SuperBible 6 [예제 3-9] 지오메트리 쉐이더 (0) | 2020.07.27 |
OpenGl SuperBible 6 [예제 3-8] 테셀레이션 이벨류에이션 쉐이더 (0) | 2020.07.27 |
OpenGl SuperBible 6 [예제 3-4] 프래그먼트 쉐이더에서 입력받기 (0) | 2020.07.27 |
오늘은 부산광역시 수영구에 있는 수영산8193 후기 입니다.
부산에 있는 퓨전술집입니다.
다양한 우리 술을 먹을수 있으며, 안주도 맛있는 집입니다.
웨이팅도 많은곳
주소 : 부산 수영구 무학로49번길 71 1층 수영산8193
오픈시간 : 5:00
술도 맛있고 음식도 맛있고 ㅋ
부산에 한잔 하려고 하신다면 꼭 가보시길 추천드립니다 ㅎ
부산 수영 금손 1983 (오마카세) (0) | 2022.11.25 |
---|---|
부산 - 이정태 본참치 (0) | 2022.10.07 |
부산 - 소수인 (0) | 2022.09.15 |
김해 장유 모산 [ 오마카세 ] (0) | 2022.08.25 |
부산 파라다이스호텔 사까에 (0) | 2022.08.25 |
member, log_view, trade
회원정보, 회원이 조회한 제품 로그, 회원이 구매한 제품 목록
이렇게 3개의 테이블이 있다.
보통은
select * member as a
left join log_view as b
on a.userid = b.userid
left join trade as c
on a.userid = c.userid
이런식으로 join 쿼리를 사용하여 결과를 낼수 있는데
만약 회원아이디별 제품 조회수, 거래건수를 뽑을려고 하면
Scalar Subquery를 사용하여 심플하게 뽑을수 있다.
기존의
select userid from meber 쿼리에서
속성 쿼리 2개만 아래와같이 추가하면 아주 간단!
select userid
, ( select count(*) cnt from log_view where log_view.userid = member.userid ) cnt_view
, ( select count(*) cnt from trade where trade .userid = member.userid ) cnt_trade
from member
예상되는 결과는 아래와 같다.
userid | cnt_view | cnt_trade |
test1 | 5 | 6 |
test2 | 2 | 8 |
간단하쥬 ㅋㅋㅋ
MYSQL 백업/복구 + 특정테이블만 (0) | 2023.08.03 |
---|---|
mysql 테이블 단위 내용 분리 (0) | 2023.08.03 |
DB 인덱스 추가 쿼리 (0) | 2022.08.17 |