Por que o DirectX usa um sistema de coordenadas para canhotos?


52

Eu considerei postar no Stack Overflow, mas a pergunta me parece muito subjetiva, pois não consigo pensar em uma explicação técnica razoável para a escolha da Microsoft nesse assunto. Mas essa pergunta me incomoda há tanto tempo e o problema continua aparecendo em um dos meus projetos, e eu nunca vi uma tentativa de explicar isso:

O OpenGL usa um sistema de coordenadas destro, onde a parte + Z do sistema de coordenadas mundial se estende em direção ao visualizador.

O DirectX usa um sistema para canhotos, onde a parte + Z do mundo se coordena e se estende para a tela, longe do visualizador.

Eu nunca usei a API Glide , por isso não sei como ela funcionou, mas pelo que posso entender, ela também usa um sistema para canhotos.

Existe uma razão técnica para isso? E, se não, existe alguma vantagem conceitual para uma entrega específica de um sistema de coordenadas? Por que um escolheria um sobre o outro?


5
Parece perguntar por que o árabe e o hebraico são escritos da direita para a esquerda, enquanto todos os outros idiomas são da esquerda para a direita.
Gabe

17
Estou apenas tentando entender por que existe uma inconsistência flagrante entre as APIs gráficas, que compartilham uma base sólida em matemática. A direção dos alfabetos semitas não é decididamente fundamentada em regras imutáveis.
greyfade

3
Esta pergunta foi referenciada em Por que não contratamos programadores .NET (25-03-2011).
Peter Mortensen

2
Nem o OpenGL nem o Direct3D são puramente direitos ou canhotos. Alterações anteriores para canhoto no espaço do clipe enquanto o espaço da tela posterior é destro, ou seja, no espaço da tela do D3D, a rotação de X para Y quando vista do lado + Z é uma rotação no sentido anti-horário. E os dois sistemas permitem que os desenvolvedores empregem espaços de qualquer quiralidade.
Legends2k

11
@PeterMortensen É bem engraçado como todos os que odeiam o .NET nem sabem o que é. O que eles provavelmente estão se referindo é o ASP.NET Webforms, a estrutura. O .NET pode ser descrito como a biblioteca de classes base e o CLR.
The Muffin Man

Respostas:


64

Eu sei que este é um post antigo, mas vi esse post sendo referenciado e não gosto do tom da resposta escolhida.

Então eu fiz um pouco de investigação!

  1. O DirectX é antigo . Foi lançado pela primeira vez em 1995, quando o mundo tinha muito mais do que Nvidia e ATI , DirectX vs OpenGL. São mais de 15 anos, pessoal.
  2. O Glide da 3dfx Interactive (um dos concorrentes do DirectX na época. O OpenGL não era para jogos naquela época) usava um sistema de coordenadas para canhotos.
  3. O POV-Ray e o RenderMan (software de renderização da Pixar) também usam um sistema de coordenadas para canhotos.
  4. O DirectX 9+ pode funcionar com os dois sistemas de coordenadas.
  5. O WPF e o XNA (que funcionam com o DirectX nos bastidores) usam um sistema de coordenadas destro.

A partir disso, posso especular sobre algumas coisas:

  • Os padrões da indústria não são tão padrão quanto as pessoas gostam.
  • O Direct3D foi construído em uma época em que todos faziam as coisas do seu jeito, e os desenvolvedores provavelmente não sabiam melhor.
  • Canhoto é opcional, mas habitual no mundo DirectX.
  • Como as convenções perdem força, todo mundo acha que o DirectX só pode funcionar com a mão esquerda.
  • A Microsoft finalmente aprendeu e seguiu o padrão em quaisquer novas APIs que eles criaram.

Portanto, minha conclusão seria:

Quando eles tiveram que escolher, eles não sabiam do padrão, escolheram o sistema 'outro' e todos os demais foram dar uma volta. Nenhum negócio obscuro, apenas uma decisão de design infeliz que foi levada adiante porque compatibilidade com versões anteriores é o nome do jogo da Microsoft.


11
O DirectX é um bebê que veste roupas em comparação com os gráficos de computador 3D, e isso é relativamente jovem comparado aos programas de computador que precisam gerenciar vários sistemas de coordenadas 3D e se transformar entre eles. Foi em meados da década de 1970 que participei da aula de gráficos pela primeira vez, e mesmo então o instrutor (Frank Crow) estava nos pressionando fortemente a usar exclusivamente os sistemas de coordenadas destros. Em 1983, eu estava trabalhando em um trabalho que não apresentava gráficos, mas havia transformações de coordenadas em andamento, e uma regra obrigatória para a mão direita era o PRIMEIRO memorando do projeto emitido. (E eu não emiti-lo!)
John R. Strohm

7
Não sei se a idade tem alguma coisa a ver com isso. A maioria das ciências físicas não usa um sistema de coordenadas destro e há muitos, muitos mais anos do que os computadores? Eu diria que é uma convenção muito mais antiga que as seguidas por Glide e depois por DX.
Thomas Owens

3
Só porque um padrão usado em acadêmicos não significa que será o mesmo em aplicações industriais / outras. Afinal, as pessoas seguem o que está sendo usado em seu próprio campo. Caso contrário, os sistemas gráficos teriam sua origem no canto inferior esquerdo da tela, e não no canto superior esquerdo. Além disso, a questão da idade é que o DX nasceu quando a coisa toda "renderização em 3D para a área de trabalho" ainda era nova, e os "padrões" e as "melhores práticas" ainda não haviam sido totalmente elaborados.
Kyte

11
a) Então, você chama minha resposta, que é uma lista simples de fatos comprováveis ​​e o que chamo explicitamente de minha própria especulação pessoal, "supersticiosa" e "não fundamentada em fatos", quando sua própria oferta é uma acusação de mau comportamento corporativo sem citação ou apoio qualquer? b) Se você não gosta da minha resposta, sempre pode dar a sua. Quando dei essa resposta, a resposta aceita já tinha um ano. Você é livre para adicionar mais conhecimento, se achar que tem algo a contribuir. c) É difícil criar um monopólio quando sua posição no mercado é instável. Este não é o MS multinacional moderno.
Kyte

2
O @Kyte 3Dfx tinha APIs proprietárias por um motivo específico, para prendê-lo no hardware. Eles forçaram os usuários finais a comprar seu hardware porque os desenvolvedores foram "subornados" para escrever jogos que funcionavam apenas com o 3Dfx. A Microsoft queria trancá-lo em sua API para que os desenvolvedores escrevessem apenas jogos para Windows, o que acabou matando o 3Dfx. Decisões comerciais claras e simples, não mau comportamento. Isso ainda está acontecendo hoje. A Nvida quer que você o prenda em seus cartões com a CUDA, a AMD quer usar o OpenCL, 2012, o mesmo raciocínio por trás do comportamento. Isso é história, eu estava na indústria na época.

37

Estou surpreso que ninguém tenha mencionado algo: o OpenGL também funciona em um sistema de coordenadas para canhotos. Pelo menos, acontece quando você está trabalhando com shaders e usa a faixa de profundidade padrão.

Depois de jogar fora o pipeline de função fixa, você lida diretamente com o "espaço do clipe". A especificação OpenGL define o espaço do clipe como um sistema de coordenadas homogêneo 4D. Ao seguir as transformações por meio de coordenadas normalizadas do dispositivo e até o espaço da janela, você encontra isso.

O espaço da janela está no espaço dos pixels de uma janela. A origem está no canto inferior esquerdo, com + Y subindo e + X indo para a direita. Isso parece muito com um sistema de coordenadas destro. Mas e o Z?

O intervalo de profundidade padrão (glDepthRange) define o valor próximo de Z para 0 e o valor distante de Z para um . Portanto, o + Z está se afastando do visualizador.

Esse é um sistema de coordenadas para canhotos. Sim, você pode alterar o teste de profundidade de GL_LESS para GL_GREATER e alterar o glDepthRange de [0, 1] para [1, 0]. Mas o estado padrão do OpenGL é trabalhar em um sistema de coordenadas para canhotos . E nenhuma das transformações necessárias para obter o espaço da janela do espaço do clipe nega o Z. Portanto, o espaço do clipe, a saída do sombreador de vértice (ou geometria) é um espaço para canhotos (meio. É um espaço homogêneo em 4D, então é difícil definir a mão).

No pipeline de função fixa, as matrizes de projeção padrão (produzidas pela glOrtho, glFrustum e similares) são transformadas de um espaço destro para um canhoto . Eles mudam o significado de Z; basta verificar as matrizes que eles geram. No espaço dos olhos, + Z se move em direção ao espectador; no espaço pós-projeção, ele se afasta.

Suspeito que a Microsoft (e o GLide) simplesmente não se deram ao trabalho de negar suas matrizes de projeção.


4
Interessante mesmo. Confesso que nunca olhei tão de perto. Embora minha pergunta diga respeito especificamente ao espaço do mundo, sua resposta me dá um pouco de reflexão.
Greyfade

Descobri que alterar a faixa de profundidade ou o teste de profundidade tornava a mão direita, mas o uso de ambos cancelados me dava um sistema para canhotos.
Hultqvist

11
Intrigante. Observe a transformação de profundidade da viewport: z_wiewport = z_clip * (distante próximo) / 2 + (próximo + distante) / 2. Isso faz com que -1 do espaço do clipe seja mapeado para próximo e +1 para longe. Portanto, o próprio espaço do clipe pode ser considerado ESQUERDO , mesmo que você ainda possa reverter como ele é mapeado para a viewport posteriormente.
Kos

11
@ NicolBolas: Você notou que mesmo o Direct3D não é puramente canhoto, já que o espaço na tela é destro? X da esquerda para a direita, Y de cima para baixo e Z longe do visualizador, ou seja, X para Y é uma rotação no sentido anti-horário quando vista do lado oposto ao eixo Z.
Legends2k

11
@obobobo " Notei que a matriz de visualizações gerada pelo gluLookAt também pode mudar a disposição" - Não, não. É assim que o vetor forward é calculado, mas essa matriz é, no entanto, uma transformação normal do corpo rígido no espaço destro (e, na verdade, + z é realmente "atrasado" no espaço destro). Negar o vetor direto não tem nada a ver com alterar a disposição do espaço de coordenadas.
Chris diz Restabelecer Monica

11

É pura história. Antigamente, os primeiros programadores de gráficos de cavernas pensavam no monitor (teletipo? Pedra?) Vendo a superfície como um papel gráfico bidimensional. Em matemática e engenharia, as convenções usuais para plotar pontos de dados em papel milimetrado são: x = à direita, y = para cima. Então, um dia, cerca de uma semana após a invenção da roda de silicone, alguém pensou em gráficos 3D. Quando o bulbo de vela dessa idéia piscou acima da cabeça, por qualquer motivo, eles escolheram adicionar Z = ao visualizador. (Ai, minha mão direita dói só de imaginar isso.)

Eles não tinham idéia de que algum dia seus descendentes se tornariam engenheiros, cientistas, artistas plásticos, artistas comerciais, animadores, designers de produtos etc. e considerariam úteis os gráficos 3D. Todas essas pessoas modernas e refinadas usam sistemas de coordenadas destros para serem consistentes entre si e com os textos de matemática e convenções de física mais estabelecidos.

É tolice basear o sistema de coordenadas 3D na superfície da tela. É o modelo que conta - os triângulos, polígonos e planos que descrevem uma casa, cadeira, ogro verde com excesso de peso ou galáxia. Atualmente, todos nós projetamos e modelamos coisas em sistemas XYZ para destros, e fazemos isso em termos do mundo do modelo, mesmo antes de pensar em como será renderizado. A câmera é adicionada em algum momento, possivelmente projetada para voar de maneiras malucas, e é uma infraestrutura invisível que converte o modelo em pixels que dentro de suas entranhas devem se mexer com transformações coordenadas do sistema.

Apenas para aumentar a confusão, algumas bibliotecas gráficas reconhecem que os CRTs digitalizam a imagem de cima para baixo e, portanto, têm Y = para baixo. Isso é usado ainda hoje em todos os sistemas de janelas e gerenciadores de janelas - X11, fvwm, gtk +, API Win31 etc. O modo como os novos sistemas de GUI 3D, como Clutter, Beryl etc. lidam com o Z, é uma questão separada da modelagem de gráficos 3D. Isso precisa envolver apenas programadores de aplicativos e designers de GUI.


11
Tudo muito interessante, e certamente explica a lógica por trás da GL da SGI. ... Mas como isso explica o DirectX ser canhoto?
Greyfade

Vários sistemas 2D e 3D derivaram suas convenções de uma história comum.
darenw

10

Ambos são essencialmente equivalentes, pois um pode ser facilmente transformado no outro. A única vantagem que posso encontrar para o sistema canhoto é: à medida que os objetos estão mais distantes do observador, em qualquer direção (x, y ou z), a distância é um valor mais alto. Mas não tenho idéia se é por isso que a Microsoft escolheu um sobre o outro.

O POV-Ray também usa um sistema de corrediça canhoto.


5
Sim, acho que muitos iniciantes gráficos acham o z aumentando com a profundidade da tela mais natural. Mas eles também querem x aumentando para a direita e y para cima, estilo "eixos gráficos". Isso lhes dá um sistema de coordenadas para canhotos. Somente mais tarde, quando tentam fazer coisas mais complexas, eles percebem que estão descompassados ​​com o mundo destro da ciência / matemática / engenharia.
timday 7/11

6
@Timday, você tem que ensinar aos novatos o segredo dos gráficos tridimensionais em 3D. Estenda a mão direita, com o polegar, o dedo indicador e o dedo médio estendidos, todos em ângulo reto um com o outro. Polegar é X, dedo indicador é Y, dedo médio é Z. Agora mova sua mão, para alinhar com as coordenadas que você deseja, e você imediatamente sabe como o movimento afetará as transformações.
John R. Strohm

3
@ John: Ei, adivinhem, os físicos também têm o mesmo aperto de mão secreto!
timday 12/11/10

11
@ John Embora eu concorde completamente com as vantagens de um sistema para destros, você sabe que sua regra de aperto de mão (que todo mundo deveria ter aprendido na escola) também pode ser usada com a mão esquerda para o sistema para canhotos.
Chris diz Reinstate Monica

@ChristianRau, qual mão você usa depende de que tipo de sistema de coordenadas você está tentando descrever, com a mão direita ou esquerda.
John R. Strohm

10

O principal desenvolvedor do DirectX (e Direct3D) Alex St. John comentou recentemente sobre isso. Em um artigo sobre a história do Direct3D, ele escreveu:

Pediram-me para escolher uma mão para a API Direct3D. Eu escolhi um sistema de coordenadas para canhotos, em parte por preferência pessoal . [...] foi uma escolha arbitrária .

Fonte: http://www.alexstjohn.com/WP/2013/07/22/the-evolution-of-direct3d/


É uma escolha arbitrária apenas se você não tem idéia do que o resto do mundo está fazendo, que o resto do mundo de fato padronizou os sistemas de coordenadas destros para gráficos.
22913 John R. Strohm

11
@ JohnR.Strohm - você leu o artigo vinculado?
Maximus Minimus

A podridão do link comeu essa página. Aqui está o último instantâneo de trabalho: web.archive.org/web/20161101112002/http://www.alexstjohn.com/WP/…
Max Barraclough

5

O importante é entender que uma quantidade enorme de tempo do programador foi desperdiçada na conversão entre sistemas de coordenadas para canhotos e destros, e ainda mais tempo foi programado para lembrar qual sistema era necessário em um determinado momento.

Tudo isso desapareceu quando os sistemas de coordenadas destros se tornaram o padrão do setor.

Já existem sistemas de coordenadas suficientes em uso comum, sem dobrar o número, introduzindo uma questão de entrega. Veja Minkler & Minkler, "Sistemas e transformações de coordenadas aeroespaciais" . Se você estiver no negócio de coordenadas aeroespaciais, realizando, por exemplo, simulação de vôo, você PRECISA desse livro.

Meu palpite é que a Microsoft não tinha NINGUÉM no projeto DirectX que sabia algo sobre os padrões do setor, não sabia que havia um padrão no setor e achava que isso não importava.

A outra possibilidade, que eles sabiam que os sistemas para destros eram o padrão do setor e deliberadamente tornavam o DirectX canhoto, para tornar difícil para as pessoas converterem código que usava o DirectX para usar o OpenGL, não leva em consideração. Se eu descobrisse que esse era realmente o caso, consideraria necessário iniciar uma nova e presumivelmente curta carreira como assassino de machados em Redmond.


Eu não queria parecer um problema com a Microsoft na minha pergunta, então não quis mencionar a possibilidade de que fosse incompatível com o OpenGL que eles tinham em mente.
greyfade

3
@greyfade: OK, então deixe-me colocar desta maneira. Não há nenhuma razão técnica para preferir as coordenadas canhotas às coordenadas destras ou vice-versa. No entanto, hoje em dia existem muito, muito boas razões para preferir coordenadas com a mão direita, tar, plumas e sair da cidade em um trilho, qualquer um que sussurre uma dica de implementar qualquer coisa usando coordenadas à esquerda. Isso torna mais simples?
John R. Strohm

Não sei se consegui reunir qualquer indignação justa por causa disso. Trabalho com PostScript regularmente como parte do meu trabalho (onde as coordenadas começam com [0, 0] como o canto inferior esquerdo e atingem o limite máximo no canto superior direito); portanto, a conversão de coordenadas é apenas uma espécie de fato da vida por aqui.
Inaimathi

2
Então isso é 100% especulação, então? Por que está marcado como a resposta?
Fator Mystic

3
Supera-me, é apenas um discurso sem sentido e, ironicamente, como o sistema de coordenadas para canhotos, muitas pessoas simplesmente concordam com ele por algum motivo.
Quick Joe Smith

5

Para todos aqueles que pensam que não há vantagem para a mão direita ou esquerda, você está absolutamente errado. A destreza dos sistemas de coordenadas cartesianas vem da definição do produto cruzado vetorial. Para vetores de base XYZ u, ve w, w = u X v.

Essa definição é fundamental para a matemática vetorial, cálculo vetorial e grande parte da física. Suponha que você esteja tentando simular interações eletromagnéticas. Você tem um vetor de campo magnético M, e uma partícula carregada se movendo nesse campo com velocidade v. De que maneira a cobrança acelera? Fácil - na direção de M X v. Exceto por algum idiota que achou divertido tornar seu sistema de exibição canhoto, então ele acelera na direção de -M X v.

Basicamente, qualquer interação física entre duas quantidades de vetores é definida como destra; portanto, a qualquer momento que você precisar simular essa interação, é melhor esperar que seu sistema gráfico seja destro ou lembre-se de transportar sinais negativos em toda sua matemática.


Eletromagnetismo não é o único lugar em que produtos cruzados surgem. Também aparece na aerodinâmica e na mecânica orbital. A simulação de vôo precisa lidar com isso, e é aí que os sistemas de coordenadas da física e os gráficos se colidem. Veja Minkler & Minkler, citado na minha resposta acima.
John R. Strohm

@ Tom: Não tenho certeza se isso é verdade; pegue 3 vetores, digamos (1, 0, 0), (0, 1, 0) e (0, 0, 1), executar ixj fornece k, pois a fórmula do produto cruzado é bem definida e os números não têm nenhum quiralidade / destreza; é apenas o humano que interpreta os três vetores com alguma destreza; mesmo assim, podemos optar por interpretá-lo com as duas mãos e ainda assim será consistente, ou seja, em um canhoto ixj = k estará ausente enquanto no destro ixj = k será em direção. Veja bem, eu também sou um destro, mas ainda é esse o fato.
precisa saber é o seguinte

@ legends2k: Sim, acho que é verdade, desde que você não queira que seus números signifiquem nada. Assim que você deseja que seus números representem uma interação física, ou as coordenadas em um sistema de exibição, ou realmente qualquer coisa, isso importa muito.
Tom

@ Tom Você está certo que devemos dar significado ao número. Isso realmente importa. Mas essa ainda não é a razão para dizer que a mão esquerda está sobre a mão direita. Eu poderia dar um significado a 0,0,1como ir para a frente e que é esquerdo assim 1,0,0 X 0,1,0make 0,0,1é mão esquerda
Thaina

@ Tom Na verdade, ao fazer Física em um sistema de coordenadas para canhotos, a fórmula ainda é, M X vmas o campo magnético Mé considerado apontado na direção oposta, porque é um pseudovetor. Você pode usar as mesmas equações em qualquer um dos sistemas: a única coisa que muda é a sua interpretação de qual direção os pseudovetores "apontam". Vetores adequados como aceleração sempre funcionam da mesma maneira em qualquer sistema de coordenadas. en.wikipedia.org/wiki/Pseudovector#The_right-hand_rule
Oscar Benjamin

5

A resposta real para a canhoto precoce do Direct3D é muito menos sinistra do que alguns de vocês estão especulando. O DirectX começou quando a Microsoft comprou o RenderMorphics em 1995.

Naquela época, o texto gráfico padrão usado nos escritórios da RenderMorphics era "Principles of Interactive Computer Graphics", de Newmann e Sproul, que faz tudo usando coordenadas canhotas. É o mesmo livro que eu usei na faculdade. Olhando para o código D3D, você pode até vê-los usando nomes de variáveis ​​que correspondem às equações do livro.

Não é uma conspiração da Microsoft. A decisão foi tomada antes mesmo da Microsoft entrar em cena.


Concordo com um comentário aqui que isso soa como uma lenda urbana, mas é bom ter sua perspectiva pessoal.
21717 Josiah Yoder

3

Em última análise, nenhum é melhor que o outro - você está mapeando coordenadas 3D para uma superfície 2D, para que a terceira dimensão (que realmente torna as coisas 3D) possa ser escolhida arbitrariamente, apontando para o visualizador ou para a tela. Você vai colocar as coisas em uma matriz 4x4 de qualquer maneira, então não há razão técnica para escolher uma sobre a outra. Funcionalmente, pode-se argumentar:

  • Existe um consenso bastante amplo na computação e em outros campos para que o eixo X corra da esquerda para a direita (aviação aparentemente sendo uma exceção notável).
  • Em matemática, o eixo Y aponta para cima. (Além disso, é onde as bolhas vão).
  • Nos monitores dos computadores, o eixo Y aponta para baixo (porque é assim que as telas de CRT funcionam e também porque é a ordem na qual a maioria dos scripts humanos organiza as linhas).
  • Quando você olha para o lado "visível" de uma superfície no plano X / Y, o normal deve apontar para o espectador (como quando você olha para imagens de satélite; a "altura acima do nível do mar" aponta para o satélite, não para o centro da terra). Como o normal para o plano X / Y é o vetor do eixo Z, segue-se que o eixo Z também deve apontar para o visualizador.
  • Quando você olha imagens 3D em uma tela de computador, os pontos que estão mais distantes do visualizador devem ter um componente Z maior. Portanto, o eixo Z deve apontar para a tela.

Conclusão : Existe algum consenso para o eixo X, mas para os outros dois, ambas as direções podem ser discutidas, produzindo duas configurações para a mão direita e duas para a esquerda, e todas fazem sentido.


3

Fato interessante.

O Direct3D (não o DirectX - o DirectX também cobre entrada, som etc.) na verdade não possui um sistema de coordenadas para canhotos.

É perfeitamente capaz de suportar os sistemas RH e LH. Se você procurar na documentação do SDK, verá funções como D3DXMatrixPerspectiveFovLH e D3DXMatrixPerspectiveFovRH. Ambos funcionam, e ambos produzem uma matriz de projeção que pode ser usada com sucesso com o seu sistema coordenado de escolha. Inferno, você pode até usar a coluna principal no Direct3D, se desejar; é apenas uma biblioteca de matrizes de software e você não precisa usá-lo. Por outro lado, se você quiser usá-lo com o OpenGL, também verá que ele também funciona perfeitamente bem com o OpenGL (que talvez seja a prova definitiva da independência da biblioteca de matrizes em relação ao Direct3D).

Portanto, se você deseja usar um sistema RH no seu programa, use a versão -RH da função. Se você deseja usar um sistema LH, use a versão -LH. O Direct3D não se importa. Da mesma forma, se você quiser usar um sistema LH no OpenGL - basta glLoadMatrix uma matriz de projeção LH. Nada disso é importante e não chega nem perto do grande problema que às vezes você vê que parece ser.


0

Não há vantagem técnica em nenhuma das mãos, é completamente arbitrário. Ambos funcionam bem, desde que você seja consistente.

Por causa das vantagens da consistência, o ideal é simplesmente "usar o que todo mundo está usando" - mas isso é bastante difícil em muitos casos, porque também não existe uma convenção predominantemente "preferida": as duas mãos são amplamente usadas. Na melhor das hipóteses, há alguma consistência dentro de certas comunidades (por exemplo, OpenGL).

Portanto, acho que a resposta básica a essa pergunta é: Eles escolheram o que escolheram porque parecia certo (sem dúvida, eles tinham alguma experiência anterior com essa destreza) e havia poucas razões para não fazê-lo.

No final, faz pouca diferença - quem quer seriamente trocar ativos / códigos com outros sistemas / comunidades terá que estar preparado para lidar com a conversão de mãos de qualquer maneira, porque é um fato da vida nos gráficos 3D.


0

Fornecendo isso como material suplementar à minha resposta anterior aqui. De uma antiga especificação do OpenGL da década de 1990:

O OpenGL não força a mão esquerda ou a mão direita em nenhum de seus sistemas de coordenadas.

(fonte: http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf ).

Portanto, como nem o D3D nem o OpenGL impõem qualquer controle, a verdadeira questão é: por que as pessoas veem isso como algo importante?


11
por que você publicou em resposta separada? Quero dizer, você pode editar sua resposta anterior para adicionar isso, não é?
Gnat #

-1

Eu odeio te dizer, mas a 'mão' de um conjunto de coordenadas é realmente subjetiva - depende de como você imagina que está olhando as coisas. Um exemplo, a partir da especificação do mapa do cubo OpenGL: se você imagina estar dentro do cubo olhando para fora, o sistema de coordenadas é canhoto, se você pensar em olhar de fora, ele é destro. Esse simples fato causa sofrimento sem fim, porque, para obter uma resposta numericamente correta, todas as suas suposições devem ser consistentes, mesmo que localmente não importe qual suposição você faça.

A especificação do OpenGL é oficialmente "neutra em termos de flexibilidade" e faz o possível para evitar esse problema - ou seja, colocá-lo no programador. No entanto, há uma "troca manual" entre as coordenadas oculares e as coordenadas dos clipes: no modelo e no espaço ocular em que estamos olhando, no espaço clip e no dispositivo que estamos observando. Estou sempre lutando com as consequências dessa complicação sem dúvida acidental.

O produto cruzado é nosso amigo, pois permite gerar um sistema de coordenadas 3D definitivamente destro ou canhoto a partir de um par de vetores. Mas qual mão depende de qual desses vetores você chama de "X".


3
O produto cruzado é anticomutativo. A x B == - B x A. Como tal, um produto cruzado é definido para pegar um primeiro vetor não colinear e um segundo vetor, escritos nessa ordem, e produzir um terceiro vetor, normal ao plano que contém o primeiro e o segundo vetores. , e de uma direção apropriada para criar um sistema de coordenadas destro quando os vetores são enumerados na ordem (primeiro, segundo, resultado). Se você optar por perverter isso, sinta-se à vontade, mas lembre-se: se você fizer isso ao meu redor, é melhor desfrutar de piche, penas e lascas em sua bunda após sair de trem.
John R. Strohm

Muito bem, John; mas você ainda precisa encarar o fato de que essa perversão é possível, o que significa que não existe "destro absoluto", o que significa que ainda depende de você e eu acertar os sinais.
Thomas Sharpless

-3

Eu poderia dizer que o padrão da indústria está errado desde o início

O padrão de coordenadas do setor realmente veio das coordenadas da mesa, quando as pessoas desenham tudo na mesa, que é o plano horizontal. X é esquerda / direita e Y é frente / trás, portanto, faz com que Z fique para cima e que nasceu Sistema de coordenadas destro

Mas você sabe que agora estamos usando a tela do monitor. É o plano vertical. X ainda está à esquerda / direita, mas Y é para cima e para baixo

Então, o que o sistema de coordenadas destro causaria? Faz + Z ficar para trás e -Z estar para frente Que diabos é isso? Cima é + e Baixo é - Direita é + e Esquerda é - MAS Forward é - e Backward é + ??? É tão estúpido se estamos fazendo esse personagem rodando no mundo 3D, mas precisamos menos z para seguir em frente. É por isso que o programador de jogos mais aprecia o DirectX

Pegar um padrão que veio da mesa e usá-lo no monitor é tão errado em muitos níveis desde o início. E agora devemos admitir que eles, OpenGL e Industry, estão errados. Eles apenas usam o que acham que os deixaria confortáveis, mas estão errados e o Sistema de Coordenadas para a Mão Direita é apenas um legado inútil que deve ser jogado fora o mais rápido possível


2
-1 por ignorância. A convenção do lado direito vem da física e da matemática, especificamente da operação de vetor entre produtos, que é fundamental para a teoria do campo eletromagnético e para a mecânica. A computação adotou-a porque o uso original dos computadores era triturar números.
John R. Strohm

Deve -1 por sua ignorância. Como eu disse "mesa coordenada" física e matemática no tempo velho sempre trabalho na mesa, não monitora, de modo que o chamou de "balcão de coordenar" porque você calcular a física e matemática na mesa horizontal
thaina
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.