Todo depende de lo que entiendas por software 3D. Normalmente, asumiría que te refieres a software que hace gráficos 3D, como videojuegos y software de modelado/diseño 3D. Pero también has añadido la «impresión 3D» como tema. Esa es una categoría de aplicación totalmente diferente. Pero vamos a tomar uno a la vez.
El software de gráficos es especial, ya que, por lo general, no se ejecuta en la CPU de propósito general de su ordenador. Una parte considerable del cálculo se descarga en la GPU o Unidad de Procesamiento Gráfico, que forma parte de la tarjeta de vídeo. Si parece que tu ordenador no tiene tarjeta de vídeo, es porque está integrada en la placa «principal» o «madre», la que tiene la CPU y la RAM, pero eso en realidad importa muy poco para la arquitectura general de las cosas.
Hay dos interfaces principales que los programadores utilizan para manejar una GPU: OpenGL y DirectX. DirectX es favorecido por Microsoft y OpenGL por todos los demás, básicamente. A veces la gente utiliza bibliotecas de mayor nivel, pero si lo que estás haciendo son gráficos y no algún tipo de intento de hacer cálculos numéricos no gráficos en una GPU, vas a tener OpenGL o DirectX en algún nivel de tu pila.
En general, si usted está buscando para aprender uno o el otro, yo recomendaría OpenGL, ya que es más ampliamente apoyado, pero yo no estoy muy familiarizado con cualquiera de los dos, por lo que tendrá que esperar a que las personas más conocedoras para responder a esta pregunta, o hacer preguntas más específicas para establecer qué biblioteca se ajusta mejor a sus necesidades.
Una vez que haya seleccionado la biblioteca, en principio, se puede utilizar cualquier lenguaje para el que existen enlaces OpenGL (o DirectX). Debido a que el software 3D es a menudo intensivo en computación y la gente quiere ser capaz de exprimir cada bit de rendimiento del hardware sin tener un modelo demasiado abstracto de computación entre ellos y los chips, a menudo optan por utilizar un lenguaje como C o C ++ que tiene un modelo de máquina abstracta que se aproxima a la máquina física subyacente real y por lo tanto le da un control más fino sobre lo que realmente está pasando.
He visto perfectamente buen software de gráficos 3D escrito en lenguajes de alto nivel, sin embargo. De hecho, una de las primeras plataformas en soportar buenos gráficos 3D acelerados por hardware fue la máquina Lisp, que fue programada en su totalidad en un dialecto de Lisp muy similar a Common Lisp; ¡y eso es un lenguaje de muy alto nivel!
Ahora vayamos a las impresoras 3D. A diferencia de lo que ocurre con los gráficos en 3D, en los que hay que renderizar un fotograma suficientes veces por segundo para proporcionar la ilusión de movimiento continuo al ojo humano, las impresoras 3D van bastante despacio. Manejarlas no es una tarea muy exigente en tiempo real. Es posible que haya un procesamiento más intensivo en términos de computación para traducir los modelos 3D de alto nivel en instrucciones de impresión capa por capa, pero incluso eso no es nada parecido a renderizar un videojuego moderno, porque no tiene que ocurrir en tiempo real.
El software para manejar las impresoras 3D puede escribirse en una amplia variedad de lenguajes. Yo elegiría uno con el que me sintiera cómodo, que tuviera un buen soporte de bibliotecas para cualquier funcionalidad que previera necesitar, y que proporcionara un nivel de abstracción lo suficientemente alto como para mantener una gran base de código bien organizada. Pero eso es un consejo bastante genérico para cualquier proyecto de software.