2010-05-18 16 views
5

Cómo recortar la representación en OpenGL (área de rectángulo simple)? Por favor, publique un ejemplo de C++.Cómo recortar la representación en OpenGL (C++)

+1

Probablemente sea mejor describir lo que ha intentado, en todo caso, que simplemente pedir un código de ejemplo. Aquí hay un enlace al OpenGL Red Book, que es gratuito en línea y probablemente tenga información sobre lo que está buscando. http://www.glprogramming.com/red/ – Feanor

+0

Gracias por el enlace. He jugado con glFrustum, proyecciones, etc., pero hace mucho tiempo. Me gustaría recibir un buen ejemplo simple de recorte. –

Respuesta

2

Si solo desea mostrar un rectángulo específico, necesita una combinación de algo como glFrustrum o glOrtho junto con glViewPort. De hecho, es glViewPort que establece el rectángulo de recorte. glFrustrum, glOrtho (gluPerspective, etc.) luego mapea un conjunto de coordenadas reales a ese rectángulo. Normalmente, apenas nota el glViewPort, porque normalmente se establece en toda el área de la ventana que está usando, y lo que cambia es la asignación para obtener diferentes vistas en la ventana.

Si solo ajusta glFrustum (por ejemplo) por sí mismo, el área de visualización en la pantalla se mantendrá igual, y usted simplemente cambiará el mapeo para que todavía llene toda el área de la ventana, y básicamente solo se mueva la cámara virtual alrededor, para acercar o alejar (etc.) en el "mundo" que se muestra. Por el contrario, si solo ajusta glViewPort, mostrará exactamente los mismos datos, pero en un rectángulo más pequeño.

Para "recortar" los datos al rectángulo más pequeño, necesita ajustar ambos a la vez, en más o menos las direcciones "opuestas" para que el rectángulo del puerto de visualización se haga más pequeño, acerque la vista del tronco para compensar .

7

Lo que probablemente necesite es el mecanismo scissor de OpenGL.

It clips de representación de píxeles que no caen dentro de un rectángulo definido porx, y, width y height parámetros.

Tenga en cuenta también que este estado de OpenGL cuando está habilitado, afecta al comando glClear al restringir el área despejada.

+0

¿cómo se evita que todos los objetos de escena renderizados en el futuro sean recortados por ese rectángulo de recorte? En otras palabras, si solo quería aplicar ese rectángulo de recorte para los elementos secundarios de un elemento GUI pero luego quería renderizar otros objetos en la escena, ¿cómo evitaría que todos los demás objetos sean recortados por ese rectángulo? – BigSauce

+0

No sé exactamente lo que quiere decir, pero la práctica común es separar la representación 3D de la representación de la GUI mediante el uso de FBO y pases. – Stringer

Cuestiones relacionadas