问题描述
如果有人想要帮助或任何类型的建议(链接),我会很满意。我使用基于场景对象的渲染创建了小引擎。
三角形成功,但仅当相机位于三角形前面时。
App.camera.FirstPersonController = true
后你可以走在后面
并尝试 raycask 点击不起作用。
也许对我来说最大的问题是轮换。 翻译适用于 mvMatrix,但如果我改变位置,还需要添加:
添加 + object.position.worldLocation[0] 到输入顶点,当我改变位置时一切正常......
但是如何适应旋转。
例如在旋转改变之后
App.scene.MyColoredSquareRayObject.rotation.roty = -45
raycast 根本没有捕捉到任何检测......
如果我不改变旋转,那么即使在第一人称模式下也能正常工作(鼠标给出旋转坐标)。
如果我使用 App.scene.MyColoredSquareRayObject.rotation.rotz = 90
的兴趣
由 z 进行光线投射。
In draw function [mouse oook work raycast] i expected everything (is calculated) to work but it doesn't
mat4.identity(object.mvMatrix);
this.mvPushmatrix(object.mvMatrix,this.mvMatrixStack);
if (App.camera.FirstPersonController == true) {
camera.setCamera(object);
}
mat4.translate(object.mvMatrix,object.mvMatrix,object.position.worldLocation);
mat4.rotate(object.mvMatrix,degToRad(object.rotation.rz),object.rotation.getRotDirZ());
mat4.rotate(object.mvMatrix,degToRad(object.rotation.rx),object.rotation.getRotDirX());
mat4.rotate(object.mvMatrix,degToRad(object.rotation.ry),object.rotation.getRotDirY());
if (raycaster.checkingProcedureCalc) raycaster.checkingProcedureCalc(object);
const triangle = [
[object.geometry.vertices[0 + a*3] + object.position.worldLocation[0],object.geometry.vertices[1 + a*3] + object.position.worldLocation[1],object.geometry.vertices[2 + a*3]],[object.geometry.vertices[0 + b*3] + object.position.worldLocation[0],object.geometry.vertices[1 + b*3] + object.position.worldLocation[1],object.geometry.vertices[2 + b*3]],[object.geometry.vertices[0 + c*3] + object.position.worldLocation[0],object.geometry.vertices[1 + c*3] + object.position.worldLocation[1],object.geometry.vertices[2 + c*3]],];
if (rayIntersectsTriangle(myRayOrigin,ray,triangle,intersectionPoint,object.position) ) {
....
var world;
var App = matrixEngine.App;
var raycaster = matrixEngine.raycaster;
const addBtn = document.querySelector(".button1");
const regularBtn = document.querySelector(".button2");
addBtn.style.display = "none";
regularBtn.style.display = "none";
const run = () => {
var App = matrixEngine.App;
// from here you can put code from examples
world.Add("triangle",1,"MyColoredTriangle1");
App.scene.MyColoredTriangle1.position.SetX(0);
//App.scene.MyColoredTriangle1.rotation.rotationSpeed.x = 15;
}
if ("serviceWorker" in navigator) {
window.addEventListener("load",function() {
// navigator.serviceWorker.register("worker.js");
});
} else {
console.warn("Matrix Engine: No support for web workers in this browser.");
}
function webGLStart() {
world = matrixEngine.matrixWorld.defineworld(canvas);
world.callReDraw();
// Make it async on Tradicional way
setTimeout(run,77);
canvas.addEventListener('mousedown',(ev) => {
raycaster.checkingProcedure(ev);
});
window.App = App;
window.world = world;
}
// matrixEngine.Engine.load_shaders("shaders/shaders.html");
window.matrixEngine = matrixEngine;
window.addEventListener("load",() => {
matrixEngine.Engine.initApp(webGLStart);
});
body {
color: lime;
background-color: black;
font-family: "Courier New";
font-size: 13px;
background-color: black;
margin: 0;
padding: 0;
overflow: hidden;
}
a {
font-family: "Courier New";
color: #0080ff;
}
.btnShadow {
-webkit-Box-shadow: inset 0px 0px 22px 2px rgba(0,255,30,1);
-moz-Box-shadow: inset 0px 0px 22px 2px rgba(0,1);
Box-shadow: inset 0px 0px 22px 1px rgba(0,1);
cursor: pointer;
cursor: hand;
color: lime;
text-shadow: 1px 0px 0px #0BFF03;
}
div.btnShadow:hover {
background-color: lime;
color: black;
text-shadow: 1px 1px 1px #0BFF03;
-webkit-border-radius: 5px 5px 5px 5px;
border-radius: 5px 5px 5px 5px;
-webkit-Box-shadow: 0 0 10px 3px #47FF19;
Box-shadow: 0 0 10px 3px #47FF19;
}
.debugBox {
position: absolute;
left: 0;
top: 0;
font-size: 12px;
width: 200px;
height: 15px;
-webkit-Box-shadow: inset 0px 0px 22px 2px rgba(0,1);
background-color: black;
color: lime;
}
.textEditor {
font-size: 10px;
width: 100%;
max-width: 850px !important;
min-width: 550px !important;
}
textarea {
-webkit-Box-shadow: inset 0px 0px 22px 2px rgba(0,1);
background-color: black;
color: lime;
}
.textureCanvas2d {
display: none;
position: absolute;
left: -3000px;
top: 0px;
width: 512px;
height: 512px;
}
.add-button {
background-color: #4CAF50;
/* Green */
border: none;
color: white;
padding: 16px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 2px 2px;
transition-duration: 0.4s;
cursor: pointer;
top: 1px;
left: 1px;
width: 100%;
width: -webkit-fill-available;
height: 30%;
background-color: rgb(27,27,27);
font-family: "Courier New";
}
.button1 {
background-color: rgb(27,27);
;
color: greenyellow;
border: 2px solid #4CAF50;
}
.button1:hover {
background-color: #4CAF50;
color: white;
}
.button2 {
background-color: rgb(27,27);
;
color: white;
border: 2px solid #4CAF50;
}
.button2:hover {
background-color: #95af4c;
color: white;
}
<script src="https://maximumroulette.com/apps/webgl-glmatrix/lib/gl-matrix-min.js"></script>
<div id="shaders"></div>
<div id="debugBox" class="debugBox" style="display:none;"></div>
<div id="fps" class="btnShadow debugBox" style="display:none;">
<button id="stopRender" type="button">stopRender</button>
<div color="white"><b id="fps"></b></div>
</div>
<button class="add-button button1">
<h1> Add to home screen </h1>
<h2> Run like PWA Application for better performance</h2>
</button>
<button class="add-button button2">
<h2> I don't wanna full PWA just play it in regular HTML5 page.</h2>
</button>
<div id="HOLDER_STREAMS" class="debugBox" style="display:none;position:absolute;left:0px;top:0px;width:512px;height:512px">
<video id="webcam_beta" autoplay width="512" height="512" style="display:none;position:absolute;left:-200px;top:-110px;"></video>
<audio id="audio_beta" src="#"></audio>
<div id="media-holder"> </div>
</div>
<script id="triangle-shader-fs" type="x-shader/x-fragment">
precision mediump float; varying vec4 vColor; void main(void) { gl_FragColor = vColor; }
</script>
<script id="triangle-shader-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition; attribute vec4 aVertexColor; uniform mat4 uMVMatrix; uniform mat4 uPMatrix; varying vec4 vColor; void main(void) { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition,1.0); vColor = aVertexColor; }
</script>
<!-- Square Shader -->
<script id="square-shader-fs" type="x-shader/x-fragment">
precision mediump float; varying vec4 vColor; void main(void) { gl_FragColor = vColor; }
</script>
<script id="square-shader-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition; attribute vec4 aVertexColor; uniform mat4 uMVMatrix; uniform mat4 uPMatrix; varying vec4 vColor; void main(void) { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition,1.0); vColor = aVertexColor; }
</script>
<!-- Cube Shader -->
<script id="cube-shader-fs" type="x-shader/x-fragment">
precision mediump float; varying vec4 vColor; void main(void) { gl_FragColor = vColor; }
</script>
<script id="cube-shader-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition; attribute vec4 aVertexColor; uniform mat4 uMVMatrix; uniform mat4 uPMatrix; varying vec4 vColor; void main(void) { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition,1.0); vColor = aVertexColor; }
</script>
<!-- Cube Texture Shader -->
<script id="cubeTex-shader-fs" type="x-shader/x-fragment">
precision mediump float; varying vec2 vTextureCoord; uniform sampler2D uSampler; void main(void) { gl_FragColor = texture2D(uSampler,vec2(vTextureCoord.s,vTextureCoord.t)); }
</script>
<script id="cubeTex-shader-vs" type="x-shader/x-vertex">
#version 300 es #define POSITION_LOCATION 0 attribute vec3 aVertexPosition; attribute vec2 aTextureCoord; uniform mat4 uMVMatrix; uniform mat4 uPMatrix; varying vec2 vTextureCoord; void main(void) { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition,1.0); vTextureCoord = aTextureCoord; }
</script>
<!-- Filter : cubeLightTex -->
<script id="cubeLightTex-shader-fs" type="x-shader/x-fragment">
precision mediump float; varying vec2 vTextureCoord; varying vec3 vLightweighting; uniform sampler2D uSampler; uniform sampler2D uSampler1; uniform sampler2D uSampler2; uniform sampler2D uSampler3; uniform sampler2D uSampler4; uniform sampler2D uSampler5;
uniform sampler2D uSampler6; uniform sampler2D uSampler7; uniform sampler2D uSampler8; uniform sampler2D uSampler9; uniform sampler2D uSampler10; uniform sampler2D uSampler11; uniform sampler2D uSampler12; uniform sampler2D uSampler13; uniform float
numberOfsamplers; void main(void) { vec4 textureColor = texture2D(uSampler,vTextureCoord.t)); vec4 textureColor1 = texture2D(uSampler1,vTextureCoord.t)); vec4 textureColor2 = texture2D(uSampler2,vTextureCoord.t)); // gl_FragColor = vec4(textureColor.rgb * vLightweighting,textureColor.a); COOL gl_FragColor = textureColor; } /* vec4 color0 = texture2D(u_image0,v_texCoord); vec4 color1 = texture2D(u_image1,v_texCoord); gl_FragColor = color0
* color1; */
</script>
<script id="cubeLightTex-shader-vs" type="x-shader/x-vertex">
//#define POSITION_LOCATION 0 // not in use // this is for drawInstance //layout(location = POSITION_LOCATION) in vec2 pos; //not in use //flat out int instance; // attribute vec3 aVertexPosition; attribute vec3 aVertexnormal; attribute vec2 aTextureCoord;
uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat3 uNMatrix; uniform vec3 uAmbientColor; uniform vec3 uLightingDirection; uniform vec3 uDirectionalColor; uniform bool uUseLighting; varying vec2 vTextureCoord; varying vec3 vLightweighting; void
main(void) { //instance = gl_InstanceID; //gl_Position = vec4(aVertexPosition + vec2(float(gl_InstanceID) - 0.5,0.0),0.0,1.0); gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition,1.0); vTextureCoord = aTextureCoord; if (!uUseLighting) { vLightweighting
= vec3(1.0,1.0,1.0); } else { vec3 transformednormal = uNMatrix * aVertexnormal; float directionalLightweighting = max(dot(transformednormal,uLightingDirection),0.0); vLightweighting = uAmbientColor + uDirectionalColor * directionalLightweighting;
} }
</script>
<!-- end of cube shader -->
<!-- Filter : cubeLightTex CLONE OF -->
<script id="obj-shader-fs" type="x-shader/x-fragment">
precision mediump float; varying vec2 vTextureCoord; varying vec3 vLightweighting; uniform sampler2D uSampler; uniform sampler2D uSampler1; uniform sampler2D uSampler2; void main(void) { vec4 textureColor = texture2D(uSampler,vTextureCoord.t));
gl_FragColor = vec4(textureColor.rgb * vLightweighting,textureColor.a); }
</script>
<script id="obj-shader-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition; attribute vec3 aVertexnormal; attribute vec2 aTextureCoord; uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat3 uNMatrix; uniform vec3 uAmbientColor; uniform vec3 uLightingDirection; uniform vec3 uDirectionalColor;
uniform bool uUseLighting; varying vec2 vTextureCoord; varying vec3 vLightweighting; void main(void) { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition,1.0); vTextureCoord = aTextureCoord; if (!uUseLighting) { vLightweighting = vec3( 1.0,0.0); vLightweighting = uAmbientColor + uDirectionalColor * directionalLightweighting; } }
</script>
<!-- end of cube shader CLONE OF -->
<!-- Pyramid Shader -->
<script id="pyramid-shader-fs" type="x-shader/x-fragment">
precision mediump float; varying vec4 vColor; void main(void) { gl_FragColor = vColor; }
</script>
<script id="pyramid-shader-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition; attribute vec4 aVertexColor; uniform mat4 uMVMatrix; uniform mat4 uPMatrix; varying vec4 vColor; void main(void) { // instance = gl_InstanceID; // gl_Position = vec4(aVertexPosition + vec2(float(gl_InstanceID) - 0.5,1.0); vColor = aVertexColor; }
</script>
<!-- Filter : cubeLightTex -->
<script id="squareTex-shader-fs" type="x-shader/x-fragment">
precision mediump float; varying vec2 vTextureCoord; varying vec3 vLightweighting; uniform sampler2D uSampler; uniform sampler2D uSampler1; uniform sampler2D uSampler2; uniform sampler2D uSampler3; uniform sampler2D uSampler4; uniform sampler2D uSampler5;
uniform sampler2D uSampler6; uniform sampler2D uSampler7; uniform sampler2D uSampler8; uniform sampler2D uSampler9; uniform sampler2D uSampler10; uniform sampler2D uSampler11; uniform sampler2D uSampler12; uniform sampler2D uSampler13; uniform float
numberOfsamplers; void main(void) { vec4 textureColor = texture2D(uSampler,textureColor.a); gl_FragColor = textureColor; } /* vec4 color0 = texture2D(u_image0,v_texCoord); gl_FragColor = color0 * color1;
*/
</script>
<script id="squareTex-shader-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition; attribute vec3 aVertexnormal; attribute vec2 aTextureCoord; uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat3 uNMatrix; uniform vec3 uAmbientColor; uniform vec3 uLightingDirection; uniform vec3 uDirectionalColor;
uniform bool uUseLighting; varying vec2 vTextureCoord; varying vec3 vLightweighting; void main(void) { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition,1.0); vTextureCoord = aTextureCoord; if (!uUseLighting) { vLightweighting = vec3(1.0,0.0); vLightweighting = uAmbientColor + uDirectionalColor * directionalLightweighting; } }
</script>
<!-- end of cube shader -->
<!-- duplicate cubeLightTex -->
<!-- Filter : sphereLightTex -->
<script id="sphereLightTex-shader-fs" type="x-shader/x-fragment">
precision mediump float; varying vec2 vTextureCoord; varying vec3 vLightweighting; uniform sampler2D uSampler; uniform sampler2D uSampler1; uniform sampler2D uSampler2; uniform sampler2D uSampler3; uniform sampler2D uSampler4; uniform sampler2D uSampler5;
uniform sampler2D uSampler6; uniform sampler2D uSampler7; uniform sampler2D uSampler8; uniform sampler2D uSampler9; uniform sampler2D uSampler10; uniform sampler2D uSampler11; uniform sampler2D uSampler12; uniform sampler2D uSampler13; uniform float
numberOfsamplers; void main(void) { vec4 textureColor = texture2D(uSampler,vTextureCoord.t)); gl_FragColor = vec4(textureColor.rgb * vLightweighting,textureColor.a); } /* vec4 color0 = texture2D(u_image0,v_texCoord); gl_FragColor = color0 * color1;vertexPositionAttribute */
</script>
<script id="sphereLightTex-shader-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition; attribute vec3 aVertexnormal; attribute vec2 aTextureCoord; uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat3 uNMatrix; uniform vec3 uAmbientColor; uniform vec3 uLightingDirection; uniform vec3 uDirectionalColor;
uniform bool uUseLighting; varying vec2 vTextureCoord; varying vec3 vLightweighting; void main(void) { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition,0.0); vLightweighting = uAmbientColor + uDirectionalColor * directionalLightweighting; } }
</script>
<!-- end of cube shader -->
<script src="https://maximumroulette.com/apps/matrix-engine/builds/me.lib.js"></script>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)