따라서 ID를 통해 피킹을 구현하려고합니다. 즉, 모든 drawArray에서 다른 고유 ID가 유니폼으로 설정되고 텍스처의 빨간색 구성 요소에 저장됩니다.Jogl, u16 채널 만 생성하지만 "텍스처 유형 및 형식 조합이 유효하지 않습니다."
16 비트 (65K 요소) 충분하다, 그래서 내가 균일 변수는 UI가 될 수 있다는 것을 알고, 반바지를 사용하도록 선택,하지만 난 그것을 내가 또 다른 문제를 발견
어쨌든 시도 준하기로 결정 대답은 프레임 버퍼와 두 개의 텍스처, 깊이 하나 16
textures = new int[2];
fbo = new int[1];
gl3.glGenTextures(2, textures, 0);
gl3.glGenFramebuffers(1, fbo, 0);
/**
* Depth.
*/
gl3.glBindTexture(GL3.GL_TEXTURE_RECTANGLE, textures[depth]);
gl3.glTexParameteri(GL3.GL_TEXTURE_RECTANGLE, GL3.GL_TEXTURE_WRAP_S, GL3.GL_CLAMP_TO_EDGE);
gl3.glTexParameteri(GL3.GL_TEXTURE_RECTANGLE, GL3.GL_TEXTURE_WRAP_T, GL3.GL_CLAMP_TO_EDGE);
gl3.glTexParameteri(GL3.GL_TEXTURE_RECTANGLE, GL3.GL_TEXTURE_MIN_FILTER, GL3.GL_NEAREST);
gl3.glTexParameteri(GL3.GL_TEXTURE_RECTANGLE, GL3.GL_TEXTURE_MAG_FILTER, GL3.GL_NEAREST);
gl3.glTexImage2D(GL3.GL_TEXTURE_RECTANGLE, 0, GL3.GL_DEPTH_COMPONENT32F, width, height, 0, GL3.GL_DEPTH_COMPONENT, GL3.GL_FLOAT, null);
/**
* IDs.
*/
gl3.glBindTexture(GL3.GL_TEXTURE_RECTANGLE, textures[id]);
gl3.glTexParameteri(GL3.GL_TEXTURE_RECTANGLE, GL3.GL_TEXTURE_WRAP_S, GL3.GL_CLAMP_TO_EDGE);
gl3.glTexParameteri(GL3.GL_TEXTURE_RECTANGLE, GL3.GL_TEXTURE_WRAP_T, GL3.GL_CLAMP_TO_EDGE);
gl3.glTexParameteri(GL3.GL_TEXTURE_RECTANGLE, GL3.GL_TEXTURE_MIN_FILTER, GL3.GL_NEAREST);
gl3.glTexParameteri(GL3.GL_TEXTURE_RECTANGLE, GL3.GL_TEXTURE_MAG_FILTER, GL3.GL_NEAREST);
gl3.glTexImage2D(GL3.GL_TEXTURE_RECTANGLE, 0, GL3.GL_R16UI, width, height, 0, GL3.GL_RED, GL3.GL_UNSIGNED_SHORT, null);
/**
* FBO.
*/
gl3.glBindFramebuffer(GL3.GL_FRAMEBUFFER, fbo[0]);
gl3.glFramebufferTexture2D(GL3.GL_FRAMEBUFFER, GL3.GL_DEPTH_ATTACHMENT, GL3.GL_TEXTURE_RECTANGLE, textures[depth], 0);
gl3.glFramebufferTexture2D(GL3.GL_FRAMEBUFFER, GL3.GL_COLOR_ATTACHMENT0, GL3.GL_TEXTURE_RECTANGLE, textures[id], 0);
그냥 적색 성분과 color_attachment0 하나를 초기화 반바지
그러나 여기
내 코드와 작은 예제를 포함 here는,
내가에서 다음과 같은 오류가 ID-glTexImage2D 완성도를 들어
GLDebugEvent[ id 0x502
type Error
severity High: dangerous undefined behavior
source GL API
msg GL_INVALID_OPERATION error generated. Texture type and format combination is not valid.
when 1391769197680
source 4.4 (Compat profile, arb, debug, ES2 compat, ES3 compat, FBO, hardware) - 4.4.0 - hash 0x1c19b340]
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1364)
at jogamp.opengl.GLDebugMessageHandler$StdErrGLDebugListener.messageSent(GLDebugMessageHandler.java:308)
at jogamp.opengl.GLDebugMessageHandler.sendMessage(GLDebugMessageHandler.java:293)
at jogamp.opengl.GLDebugMessageHandler.glDebugMessageARB(GLDebugMessageHandler.java:319)
at jogamp.opengl.gl4.GL4bcImpl.dispatch_glTexImage2D1(Native Method)
at jogamp.opengl.gl4.GL4bcImpl.glTexImage2D(GL4bcImpl.java:27313)
at javax.media.opengl.DebugGL4bc.glTexImage2D(DebugGL4bc.java:19874)
at ec.rendering.input.picking.EC_Picking.initRenderingTargets(EC_Picking.java:107)
, 여기 VS :
#version 330
layout (location = 0) in vec3 position;
uniform mat4 modelToWorldMatrix;
layout(std140) uniform GlobalMatrices {
mat4 worldToCameraMatrix;
mat4 cameraToClipMatrix;
};
void main() {
gl_Position = cameraToClipMatrix * (worldToCameraMatrix * vec4(position, 1.0));
}
modelToWorldMatrix 아직 순간에 계정에서 촬영되지
그리고 여기 FS :
#version 330
uniform uint id;
out vec4 outputColor;
void main() {
outputColor = vec4(id, 0, 0, 1);
}
반바지를 사용하는 것이 가능합니까?
JOGL, OpenGL을 3.3
편집 : 그것은 내가
gl3.glTexImage2D(GL3.GL_TEXTURE_RECTANGLE, 0, GL3.GL_R16I, width, height, 0, GL3.GL_RED_INTEGER, GL3.GL_SHORT, null);
으로 그 부분을 해결하지만 짧은 균일 한 값
gl3.glUniform1i(pickModel.getIdUL(), (int)mesh.getId());
을 설정하려고하면 지금은 오류가 지금 보이는
오류
GLDebugEvent[ id 0x502
type Error
severity High: dangerous undefined behavior
source GL API
msg GL_INVALID_OPERATION error generated. Wrong component type or count.
when 1391779682993
source 4.4 (Compat profile, arb, debug, ES2 compat, ES3 compat, FBO, hardware) - 4.4.0 - hash 0x5ee072e3]
-1 (실제로는 1)이 아니기 때문에 균일 한 위치가 올바른 것처럼 보입니다 ...
어떻게하면 짧은 정보를 업로드 할 수 있습니까?
이미 존재하는 답변에 대한 추가 질문이나 의견이 있습니까? 아니면 이미 문제를 직접 해결하셨습니까? –
@ChristianRau 아니요, 나는 청산 색조차도 모순이 있었기 때문에 제가하지 않았습니다. http://www.opengl.org/discussion_boards/showthread.php/183630-Encoding-id-picking-into-a-16b-red- 구성 요소 - 질감? p = 1257745 # post1257745 그래서 포기하기로 결정했습니다. – elect