얼마 전 부터 Omnidirectional Panorama를 Web 상에서 Rendering하기 위한 방법을 찾고 있었다. Omnidirectional Panorama를 표현함에 있어, 두 가지 정도를 생각해 볼 수 있었는데, 첫째 전방위를 6장(상하좌우앞뒤)의 이미지로 나누어 표현하는 방법, 둘째 전방위 이미지를 Equirectangular Projection 형태로 1장의 이미지로 표현하는 방법이다. (보다 자세한 내용은 푸른하늘님의 블로그 http://www.internetmap.kr/을 참조) 간단히 각각의 주요한 장단점을 비교하면, Cubical Projection은 단지 각 6장의 이미지를 여러 크기별로 저장함으로서 간단한 LOD(Level Of Detail)이 가능하다. 예를들어 Level1..
Projection은 3D World Space상에 있는 Objects를 2D 화면상에 "투영" 하는 것. 3D Vertex -> [Projection Matrix -> ModelView Matrix] -> 2D Vertex 로 변환되는 과정이다. 3차원이 2차원으로 변환되면서, x, y, z 성분 중 z 성분이 사라지게 되는데, (여기서 말하는 z 성분이란, Viewer의 Front Vector를 기저로 하는 벡터) "엄밀히 말하면 사라지는 것"이 아니라, Depth 라는 값으로 변환되는 것. OpenGL에서는 어느 픽셀의 Depth값을 읽어 낼 수 있는 함수가 있다. float depth; glReadPixels( 픽셀위치X, 픽셀위치Y, 1, 1, GL_DEPTH_CONPONENT, GL_FLOAT..
Plane Geometry 생성. 현재 파일은 *.raw 까지만 지원. 생성자의 매개변수(1.파일명, 2.가로버텍스수, 3.세로버텍스수, 4.가로버텍스간격, 5.세로버텍스간격) 중요한 것은 geo.buildPlane(256, 256, dX, dZ); 부분이다. Geometry 클래스에서 정해진 만큼 평면 매쉬를 생성한 후, HeightMapLoader 클래스 에서는 높이정보를 넣는다. *.raw 파일의 바이트 오더와 Geometry의 메쉬 인덱스 오더가 일치해야하는 것이 중요하다. 아직 미완성이며, 당연히 최적화는 없다. 생각컨데, 1. 프러스텀 컬링을 위해서는 glVertexPointer & glDrawElements 방식은 안될것 같다. -확인요. 2. 파일의 내용을 순서대로 읽을 것이라면, 굳이 b..
Java Web Start와 같은 자동 다운로드 환경에서 .jar 을 사용하려면, 보안 및 공유 환경 때문에 고려할 몇가지 사항이 있다. - 일반적인 .jar 파일은 SandBox 보안 모델은 사용함으로, 다음과 같은 Local 시스템을 지원하지 못한다. . local disk 및 native library 사용 못함. . Network 자원은 자신이 download된 서버외에는 사용하지 못함. . Security Manager 설치 불가, System Property의 제한적 사용. - 상기한 보안상 제약을 해결하기 위해, signed JAR 파일을 사용해야 한다. 단계. 1. 자신의 .jar 파일 생성. 2. 인증서 생성. 3. 인증서를 jar에 등록. 방법 1. 키 생성. prompt> keytoo..
glut ( include, lib, system32 ) glext
GLSL을 이용한 텍스쳐 예제이다. 늘 그랬던 것 처럼, 예제 소스 코드의 간결함을 위해 예외 처리 등의 구문은 추가하지 않았다. < JOGL - Texture > //VertexShader.vs void main(){ gl_TexCoord[0]= gl_MultiTexCoord0; gl_Position= ftransform(); } //FragmentShader.fs uniform sampler2D myTex; void main(){ gl_FragColor= texture2D(myTex, vec2(gl_TexCoord[0])); } //# Render.java의 멤버함수 - 텍스쳐를 읽어들인다. import java.io.*; import com.sun.opengl.util.texture.*; priva..
Toon Shading ( 만화적 셰이딩)은 Cell Rendering 이라고도 하는 NPR( Non-Photorealistic Rendering, 비 실사 렌더링 ) 분야의 한 종류이다. Toon Shading 의 핵심은, 1. 급격한 음영 변화와 비교적 단순한 단계의 음영. (밝음, 중간, 어두움) 2. 외곽선. 의 두가지로 들 수 있다. 외곽선을 제외한 Toon Shading이다. // VertexShader.vs uniform vec3 lightDir; varying float intensity; void main(){ intensity= dot(lightDir, normalize(gl_Normal)); gl_Position= ftransform(); } // FragmentShader.fs va..
< GLSL Animation > GLSL에 에니메이션을 적용시켜보도록 하겠다. 그러기 위해서는 GLSL에 있는 변수에 변화를 주어야 하고, 그 변수를 실제 적용 시켜야한다. fs는 그대로 두고, vs에만 변화를 주어보겠다. //VertexShader.vs uniform float time; void main(){ gl_FrontColor= gl_Color; vec4 v= vec4(gl_Vertex); v.y= cos( 5 * v.z + time*0.1); gl_Position= gl_ModelViewProjectionMatrix * v; } // time라는 변수를 uniform float 으로 선언하여, OpenGL App. 에서 읽어들일 수 있게 하였다. public void init(GLAutoD..
VertexShader(이하 vs 또는 VS) 와 FragmentShader(이하 fs 또는 FS)를 OpenGL Application 으로 읽어들이는 가장 간단한 방법에 대해 알아 보았다. // VertexShader.vs void main(){ gl_Position= ftransform(); } // FragmentShader.fs void main(){ gl_FragColor= vec4(1, 0, 0, 1); } 위의 vs 와 fs의 기능은 매우 간단하다. glVertex3f(...) 등으로 렌더링 파이프 라인에 넣어진 버텍스는 vs 에 따라 projection, view 를 거친후 red 색상으로 화면에 출력해 준다. 그렇다면 실제 응용프로그램에서 지정된 색상 즉, gl.glColor3f(1, 1..
< 간단한 GLSL 예제 > // Test.java import javax.media.opengl.*; import com.sun.opengl.util.*; import java.awt.*; import java.awt.event.*; public class Test extends Frame{ public Test(){ this.setSize(400, 300); this.setTitle("Test1"); GLCapabilities glCaps= new GLCapabilities(); glCaps.setRedBits(8); glCaps.setBlueBits(8); glCaps.setGreenBits(8); glCaps.setAlphaBits(8); GLCanvas canvas= new GLCanvas(gl..
- Total
- 203,742
- Today
- 1
- Yesterday
- 14