shader顶点程序中,UV信息不来自纹理坐标集,而来自输出pos的换算,求分析原因!
        v2f vert(appdata_base v)
        {
            v2f o;
            o.pos = mul(UNITY_MATRIX_MVP, v.vertex);//投影空间坐标
            #if UNITY_UV_STARTS_AT_TOP
                        float scale = -1.0;
                        #else
                        float scale = 1.0;
                        #endif
                        o.uv.xy = (float2(o.pos.x, o.pos.y*scale) + o.pos.w) * 0.5;
                        o.uv.zw = o.pos.zw;
            return o;
        }

                    float4 frag (v2f i) : COLOR
        {
            // 对_GrabTexture纹理进行取样,进行2D纹理映射查找,后面传入的一定要四元纹理坐标。
            // UNITY_PROJ_COORD传入四元纹理坐标用于给tex2Dproj读取,但是多数平台上,返回一样的值。
            // 【自动生成的纹理UV】类型是float4,使用如下方式进行2D纹理映射查找
            //half4 texCol = tex2Dproj(_GrabTexture, UNITY_PROJ_COORD(i.uv));

            // 也可以使用tex2D进行采样,但是【自动生成的纹理UV】时必须要除以w转为齐次坐标
            float last_x = i.uv.x / i.uv.w;
            float last_y = i.uv.y / i.uv.w; 
            // 好比将_GrabTexture平铺到屏幕,模型出现的地方才显示
            half4 texCol = tex2D(_GrabTexture, float2(last_x, last_y));
            // 颜色反相,便于观察效果
            return 1 - texCol;
        }

上面是一段shader的顶点程序,通常情况o.uv等于纹理坐标集,但是这里是来自顶点的换算。
o.pos输出的是剪裁坐标,最后的效果好像是主材质直接贴到屏幕上,而显示模型的地方才显示纹理。我不是很清楚其中的原理。求大神们解释一下?

1个回答

只发个vert要分析太勉强吧,一般都是根据整个的上下文分析的。如果是使用pos的话可能这张纹理和屏幕大小是一样的

l364244206
潜水的小懒猫 是啊,结果是这张纹理是和屏幕大小一样,感觉像平铺, 不过只有显示模型的地方才会显示那个纹理的局部。
5 年多之前 回复
l364244206
潜水的小懒猫 嘿,那我再发个片段的:
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Unity shader 根据网格顶点的高低 改变UV方向

shader里面怎么计算顶点~来改变uv的方向?有没有大佬教一下!水往低处流的效果!没C币 有红包~

UnityShader中下面的uv怎么计算的?

问题一: 下面两个箭头处分别是怎么计算的呢?(求过程) ![图片说明](https://img-ask.csdn.net/upload/201810/25/1540429385_392378.png) ![图片说明](https://img-ask.csdn.net/upload/201810/25/1540431320_804446.jpg)

D3D9(DirectX)烘焙LightMap过程中,输出纹理坐标Y翻转后纹理不完整

最近尝试采用D3D9的UVAtlas+TextureGutterHelper+effect(v_2_0)进行模型的lightmap烘焙,在写effect文件的vertexshader时遇到一个奇怪的问题,使用UVAtlas展开UV后,计划按照纹理的UV坐标输出贴图的position,.fx文件中完整代码如下: ``` //Vertexshader输入 struct VS_INPUT { float4 Pos : POSITION; float3 Normal : NORMAL; float2 Tex0 : TEXCOORD0; }; //Vertexshader输出与PixelShader输入 struct PSUVIn { float4 Pos : POSITION; float2 Tex0 : TEXCOORD0; float4 Clr0 : COLOR0; }; PSUVIn VSRenderToUV(VS_INPUT input, uniform bool bPtLight, uniform bool bSpecular) { PSUVIn output = (PSUVIn)0; float2 screenTex = input.Tex0*float2(2, 2) - float2(1, 1); output.Pos = float4(screenTex, 0.5, 1); // 转换顶点到世界坐标 float4 vPosWorld = mul(input.Pos, g_mWorld); // 将法线转换到世界坐标系 float3 vNormalWorld = mul(input.Normal, (float3x3)g_mWorld); //将纹理坐标直接输出,传递给pixelshader output.Tex0 = input.Tex0; // 计算光线方向向量 float3 vLight; if (bPtLight) //是点光源 vLight = normalize(g_vLightPosition - vPosWorld.xyz); else //方向光 vLight = normalize(g_vLightDirection); // 计算光照度 output.Clr0.rgb = g_vLightColor * g_vMaterialAmbient; output.Clr0.rgb += g_vLightColor * g_vMaterialDiffuse * saturate(dot(vLight, vNormalWorld)); // 计算镜面光 if (bSpecular) { float3 vCamera = normalize(vPosWorld.xyz - g_vCameraPosition); float3 vReflection = reflect(vLight, vNormalWorld); float fPhongValue = saturate(dot(vReflection, vCamera)); output.Clr0.rgb += g_vMaterialSpecular * pow(fPhongValue, g_nMaterialShininess); } output.Clr0.a = g_fMaterialAlpha; return output; } float4 PSRenderToUV(PSUVIn input, uniform bool bTexture) : COLOR0 { //将vertexshader计算的光照直接输出渲染为纹理 float4 colorOut = input.Clr0; return colorOut; } ``` 在vertexshader函数VSRenderToUV中,以下代码部分负责将贴图的UV坐标换算为输出纹理的xy坐标 ``` float2 screenTex = input.Tex0*float2(2, 2) - float2(1, 1); output.Pos = float4(screenTex, 0.5, 1); ``` 测试过程使用了d3d的示例模型,模型样式和纹理如下两图 ![图片说明](https://img-ask.csdn.net/upload/202005/27/1590561467_77367.png) ![图片说明](https://img-ask.csdn.net/upload/202005/27/1590561493_893085.png) 采用上述effect代码,输出纹理样式为 ![图片说明](https://img-ask.csdn.net/upload/202005/27/1590561588_745754.png) 可以看出烘焙后的纹理图与原始贴图坐标不一致,在Y方向上发生了翻转,为此改变UV换算代码为 ``` float2 screenTex = input.Tex0*float2(2, -2) - float2(1, -1); output.Pos = float4(screenTex, 0.5, 1); ``` 希望将输出纹理的y坐标翻转过来,然而测试后发现,只能输出如下图像 ![图片说明](https://img-ask.csdn.net/upload/202005/27/1590561881_581131.png) 可以发现翻转y以后模型面部、腿部等部分纹理没有输出,求教各位大神问题出在哪里,如何解决?谢谢~

UnityShader中下面的uv怎么计算?

红色框里计算的是两点之间的模长,即求两点间的距离。但是tmpUV并不是一个点呀。 怎么回事呢? ![图片说明](https://img-ask.csdn.net/upload/201810/29/1540795170_310243.png)

unity shader 限制贴图显示

这几天在学shader的时候,想到一个问题,我有两张纹理图,一张是主纹理(1024*512),一张是局部纹理(256*128),局部纹理在主纹理的中心, 我已经将它们混合了,但发现了一个问题,由于局部纹理太小,导致它会被拉伸,我想到一个解决方案就是将局部纹理分辨率设置成主纹理一样的分辨率, 多余的设置成透明后混合,也可以达到效果。但我不想放弃另一种思路,就是直接将纹理混合,在shader 中限制其显示区域,奈何能力不够,网上也找不到类似 资料,只能来这试试![图片说明](https://img-ask.csdn.net/upload/201803/05/1520218412_400185.png)

OpenGL用 shader 如何实现对立方体的单个面添加纹理

注意, 是用shader 给单个面添加。OpenGL老的接口实现我会。

请问如何将OpenGL中的纹理单元传递给片段着色器???

小白我最近在学习GLSL,绝对的菜鸟级别啊~ 今天遇到了一个问题,我用 *texture[1]* 在程序中存储了一个纹理,然后使用了下面两行代码将纹理传递给片段着色器,程序是可以运行的 *texUnitLoc = glGetUniformLocation(p, "tex"); glUniform1i(texUnitLoc, 0);* 但是当我在程序中存储两个纹理以后,想要将两个纹理都传递到着色器时,应该怎么办啊??将上面代码中的‘0’换做‘texture[0]’也不管用啊,什么都不管用啊,glUniform究竟是怎么一回事啊?求大神指点~~T_T 附代码如下: #include <stdio.h> #include <stdlib.h> #include <GL/glew.h> #include <GL/glut.h> #include <glaux.h> #include "textfile.h" #include "printInfoLog.h" GLfloat LightAmbient0[]= {1, 1, 1, 1.0f }; GLfloat LightDiffuse0[]= {1.0f, 1.0f, 1.0f, 1.0f }; GLfloat LightSpecular0[]={1.0f, 1.0f, 1.0f, 1.0f}; GLfloat LightPosition0[]= {3.0f, 3.0f, 3.0f, 0.0f }; GLfloat MaterialAmbient[] = {0.3, 0.3, 0.3, 1.0f}; GLfloat MaterialDiffuse[] = {0.7, 0.7, 0.7, 1.0f}; GLfloat MaterialSpecular[] ={0.3, 0.3, 0.3, 1.0f}; GLfloat MaterialSe = 64.0f; GLUquadricObj *quadratic; GLuint texture[2]; // 存储一个纹理 GLint texUnitLoc,l3dUnitLoc; float a = 0.0f; GLuint v,f,p; float t = 0; GLint loc; AUX_RGBImageRec *LoadBMP(char *Filename) // 载入位图图象 { FILE *File=NULL; // 文件句柄 if (!Filename) // 确保文件名已提供 { return NULL; // 如果没提供,返回 NULL } File=fopen(Filename,"r"); // 尝试打开文件 if (File) // 文件存在么? { fclose(File); // 关闭句柄 return auxDIBImageLoad(Filename);// 载入位图并返回指针 } return NULL; // 如果载入失败,返回 NULL } int LoadGLTextures() // 载入位图(调用上面的代码)并转换成纹理 { int Status=FALSE; // 状态指示器 AUX_RGBImageRec *TextureImage[2]; // 创建纹理的存储空间 memset(TextureImage,0,sizeof(void *)*1); // 将指针设为 NULL // 载入位图,检查有无错误,如果位图没找到则退出 if (TextureImage[0]=LoadBMP("Data/Crate.bmp")) { Status=TRUE; // 将 Status 设为 TRUE glGenTextures(1, &texture[0]); // 创建纹理 // 创建 MipMapped 纹理 glBindTexture(GL_TEXTURE_2D, texture[0]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data); } if (TextureImage[0]) // 纹理是否存在 { if (TextureImage[0]->data) // 纹理图像是否存在 { free(TextureImage[0]->data); // 释放纹理图像占用的内存 } free(TextureImage[0]); // 释放图像结构 } if (TextureImage[1]=LoadBMP("Data/1.bmp")) { Status=TRUE; // 将 Status 设为 TRUE glGenTextures(1, &texture[1]); // 创建纹理 // 创建 MipMapped 纹理 glBindTexture(GL_TEXTURE_2D, texture[1]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[1]->sizeX, TextureImage[1]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[1]->data); } if (TextureImage[1]) // 纹理是否存在 { if (TextureImage[1]->data) // 纹理图像是否存在 { free(TextureImage[1]->data); // 释放纹理图像占用的内存 } free(TextureImage[1]); // 释放图像结构 } return Status; // 返回 Status } void changeSize(int w, int h) { float ratio = 1.0* w / h; glMatrixMode(GL_PROJECTION); glLoadIdentity(); glViewport(0, 0, w, h); gluPerspective(45,ratio,1,100); glMatrixMode(GL_MODELVIEW); } void init() { glEnable(GL_DEPTH_TEST); glClearColor(0.0,0.0,0.0,0.0); glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient0); glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse0); glLightfv(GL_LIGHT0,GL_SPECULAR, LightSpecular0); glLightfv(GL_LIGHT0, GL_POSITION, LightPosition0); glEnable(GL_LIGHT0); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, MaterialAmbient); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialDiffuse); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR, MaterialSpecular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS, MaterialSe); quadratic=gluNewQuadric(); gluQuadricNormals(quadratic, GLU_SMOOTH); gluQuadricTexture(quadratic, GL_TRUE); LoadGLTextures(); // 调用纹理载入子例程 glEnable(GL_TEXTURE_2D); // 启用纹理映射 } void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(0.0,0.0,5.0, 0.0,0.0,-1.0, 0.0f,1.0f,0.0f); a += 0.35f; if(a > 360) a -= 360.0f; glRotatef(a, 0, 1, 0); glRotatef(0, 1, 0, 0); //glBindTexture(GL_TEXTURE_2D, texture[0]); gluSphere(quadratic, 1, 32, 16); t+=0.01; glutPostRedisplay(); glutSwapBuffers(); } int main(int argc, char **argv) { void setShaders(); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutCreateWindow("GLSL DEMO"); init(); glutDisplayFunc(renderScene); glutReshapeFunc(changeSize); glewInit(); if (glewIsSupported("GL_VERSION_2_0")) printf("Ready for OpenGL 2.0\n"); else { printf("OpenGL 2.0 not supported\n"); exit(1); } setShaders(); texUnitLoc = glGetUniformLocation(p, "tex"); glUniform1i(texUnitLoc, 0); //l3dUnitLoc = glGetUniformLocation(p, "l3d"); //glUniform1i(l3dUnitLoc, texture[1]); glutMainLoop(); return 0; } void setShaders() { char *vs = NULL,*fs = NULL,*fs2 = NULL; v = glCreateShader(GL_VERTEX_SHADER); f = glCreateShader(GL_FRAGMENT_SHADER); vs = textFileRead("vs.txt"); fs = textFileRead("fs.txt"); const char * vv = vs; const char * ff = fs; glShaderSource(v, 1, &vv,NULL); glShaderSource(f, 1, &ff,NULL); free(vs);free(fs); glCompileShader(v); glCompileShader(f); printShaderInfoLog(v); printShaderInfoLog(f); p = glCreateProgram(); glAttachShader(p,v); glAttachShader(p,f); glLinkProgram(p); printProgramInfoLog(p); glUseProgram(p); //将p改为0表示使用固定的管线 }

opengl 有关深度值,顶点坐标的z值有奇怪问题

我碰到了一个奇怪的问题:画了一个正方体, ![图片说明](https://img-ask.csdn.net/upload/201506/17/1434546945_12218.png) 然后读取正中间一行像素的对应片元的z坐标值, 为啥先减小后变大又减小,这个有具体的值,第一列对应x,第三列对应z ![图片说明](https://img-ask.csdn.net/upload/201506/17/1434547013_830576.png)

unity shader关于语义

请问unity shader中有texcoordn语义,这n组纹理坐标有什么区别,还有colorn

Unity Shader Graph在普通的3D项目中不能使用吗?

我只知道在创建项目的时候创建lightweight项目的话,可以使用shader graph。 可以在3D项目中使用shader graph吗? 网上教程是使用package下载lightweight和shader graph,但是在3D项目中的package根本搜索不到这两个包。 请问3D项目到底能不能使用shader graph?

opengl shader编写规则

opengl shader怎么编写 有什么规则 或需要注意的地方 尤其是顶点着色器和细分着色器的相关内容。 新手希望有详细的 望指教。 (是不是所有要的变化都在.vs或.ps内编写?)

关于OpenGL用shader来使用贴图的一些问题

我想实现用shader来显示贴图,但是总是没办法显示图片,只能显示一个灰色的三角形,希望有人能帮我看看是什么问题,下面是代码 void initTest(char* fileName1, char* fileName2) { Shader shader("D:\\VS2013Project\\CPP_Project\\subdivision\\subdivision\\Shader\\shaderTextureTest"); shader.Bind(); currentShader = shader.GetProgram(); tex_model_view_matrix_loc = glGetUniformLocation(shader.GetProgram(), "model_view_matrix"); tex_projection_matrix_loc = glGetUniformLocation(shader.GetProgram(), "projection_matrix"); tex_sampler_texture_unit = glGetUniformLocation(shader.GetProgram(), "tex"); int imageWidth1, imageHeight1; FREE_IMAGE_FORMAT fif1 = FreeImage_GetFileType(fileName1); FIBITMAP* dib1 = FreeImage_Load(fif1, fileName1, 0); if (dib1 == NULL) return; dib1 = FreeImage_ConvertTo24Bits(dib1); BYTE* image1Data; imageWidth1 = FreeImage_GetWidth(dib1); imageHeight1 = FreeImage_GetHeight(dib1); image1Data = FreeImage_GetBits(dib1); static const GLfloat vertex_array[] = { 0.0f, 0.0f, 0.0f, 1.0f, 10.0f, 0.0f, 0.0f, 1.0f, 0.0f, 10.0f, 0.0f, 1.0f, 10.0f, 10.0f, 0.0f, 1.0f }; static const GLfloat tex_coord_array[] = { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f }; //glActiveTexture(GL_TEXTURE1); //以下是处理顶点数据和纹理坐标数据的代码 glGenBuffers(1, textureVertexDataBuffer); glBindBuffer(GL_ARRAY_BUFFER, textureVertexDataBuffer[0]); glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_array) + sizeof(tex_coord_array), NULL, GL_STATIC_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertex_array), vertex_array); glBufferSubData(GL_ARRAY_BUFFER, sizeof(vertex_array), sizeof(tex_coord_array), tex_coord_array); glGenVertexArrays(1, textureVAO); glBindVertexArray(textureVAO[0]); glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, (void*)(0)); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (void*)(vertex_array)); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glGenTextures(1, textureBuffer); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textureBuffer[0]); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, imageWidth1, imageHeight1, 0, GL_RGB, GL_UNSIGNED_BYTE, image1Data); glUniform1i(tex_sampler_texture_unit, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram(currentShader); vmath::mat4 projection_matrix(vmath::perspective(45, aspect, 0.1, 100)); vmath::vecN<float, 3> eye; eye[0] = 0.0f; eye[1] = 0.0f; eye[2] = 6.0f; vmath::vecN<float, 3> center; center[0] = 0.0f; center[1] = 0.0f; center[2] = 0.0f; vmath::vecN<float, 3> up; up[0] = 0.0f; up[1] = 1.0f; up[2] = 0.0f; vmath::mat4 modelView_matrix(vmath::lookat(eye, center, up)); glUniformMatrix4fv(tex_model_view_matrix_loc, 1, GL_FALSE, modelView_matrix); glUniformMatrix4fv(tex_projection_matrix_loc, 1, GL_FALSE, projection_matrix); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textureBuffer[0]); glBindVertexArray(textureVAO[0]); glDrawArrays(GL_TRIANGLES, 0, 3); glutSwapBuffers(); } 下面是shader的代码: vert: #version 430 core layout (location = 0) in vec4 vertex_position; layout (location = 1) in vec2 texture_coord; uniform mat4 model_view_matrix; uniform mat4 projection_matrix; out vec2 output_tex_coord; void main() { gl_Position = projection_matrix * model_view_matrix * vertex_position; output_tex_coord = texture_coord; } frag: #version 430 core uniform sampler2D tex; layout (location = 0) out vec4 color; in vec2 output_tex_coord; void main() { color = texture(tex, output_tex_coord); } 下面是结果 ![图片说明](https://img-ask.csdn.net/upload/201706/04/1496571190_821232.png)

opengl透视投影后得到的齐次坐标w分量的含义?

对于经过变化的a=(x,y,z,w ),那么可以知道,当w分量大于零时是世界坐标系下a在视点之前,w分量小于零时是在视点之后。在进行裁剪时,书上只是提到w分量大于零(《计算机图形学(opengl版)》第三版,321页最上,“aw只取正值“)使用z+w(近裁剪面)经行测试,判断是否需要裁剪。但是如果w分量是负值,我使用相同方法计算直线和裁剪平面的焦点,得到的坐标,进行透视除法后,x,y的值超出了[0,1]的范围。那么对w为负值时需要怎样处理?当A(x,y,z,w)和B(x,y,z,w),A的w为负值,B的w为正值,那么怎么计算直线AB和裁剪面的交点坐标?拜托各位大牛了~软渲染流水线卡到这一步完全没有思路,对于所有在视点之前的图形渲染没有问题,一旦w出现负值就各种错乱,拜托各位啦修改

opengl如何使用shader

opengl新手入门,用的是visual2013,使用glut来写的opengl。目前学会了基础画图,想要用shader处理,可是不知道如何入手,请问该怎么学? 问题1:我目前只在头文件中包含glut.h,偶尔用到math.h与stdio.h,如果我想使用shader的话需要哪些头文件? 问题2:目前知道shader需要创建.frag和.vert,需要在main.cpp中如何操作才能链接到这两个文件? 问题3:.frag和.vert文件中需要都是用什么代码来进行处理的?

海水shader问题,渐变效果出不来, 手机和PC上效果不同

这是我shader ``` Shader "Custom/SeaSimple_1" { Properties { _Color0("Water Color",Color) = (1,1,1,1)//水的颜色 _Color1("Water Depth",Color) = (0,0,0,0)//水的深度的颜色 _Alpha("Alpha",Range( 0,1))= 1//水面的正题透明度 _ColorDepth("ColorDepth",Range( 0,1))= 0//水的深度 } SubShader { Tags {"RenderType"="Transparent" "Queue"="Transparent"} zwrite off Pass { Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct VertexOutput { float2 uv : TEXCOORD0; float4 pos : SV_POSITION; float4 scrPos : TEXCOORD1; }; float4 _Color0; float4 _Color1; float _Alpha;//水的透明度 float _ColorDepth; sampler2D _CameraDepthTexture; VertexOutput vert (appdata v) { VertexOutput o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.scrPos = ComputeScreenPos(o.pos);//将返回片段着色器的屏幕位置 COMPUTE_EYEDEPTH(o.scrPos.z);//计算顶点摄像机空间的深度:距离裁剪平面的距离 return o; } fixed4 frag (VertexOutput i) : COLOR { //计算当前像素深度 float depth= tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.scrPos)).r;//UNITY_PROJ_COORD:深度值 [0,1] depth = LinearEyeDepth(depth);//深度根据相机的裁剪范围的值[0.3,1000],是将经过透视投影变换的深度值还原了 depth -= i.scrPos.z; //计算水的透明度: 使用深度值 float alpha = saturate( _Alpha*depth); //计算颜色深度: float colDepth = saturate(_ColorDepth*depth); colDepth = 1-colDepth; colDepth = lerp(colDepth, colDepth*colDepth*colDepth, 0.5);//调整深度,看个人喜好 half3 col; col.rgb = lerp(_Color0.rgb, _Color1.rgb, colDepth); return float4(col.rgb, alpha ); } ENDCG } } } ``` 这是电脑上效果 ,目前安卓也可以了,就iphone不行 ![图片说明](https://img-ask.csdn.net/upload/201607/08/1467967854_161148.png) 这是iphone上效果 ![图片说明](https://img-ask.csdn.net/upload/201607/08/1467967899_496514.png) 求大神指点

OpenGL 纹理 程序能运行,但是没结果

#include <gl/glew.h> #include <gl/glut.h> #ifdef _DEBUG #include <iostream> #endif #include <glm/glm.hpp> #include <glm/gtc/matrix_transform.hpp> #include <glm/gtx/euler_angles.hpp> #include "imageloader.h" // program static GLuint program, textureId; // width and height of window static GLint width, height; // degree of rotation GLfloat angle = 0.0f; //---------------------------------------------------- // // Shader Source // static const char* vShaderSource = "#version 450 core\n" "layout (location = 0) in vec3 vpos;\n" //"layout (location = 1) in vec4 vcolor;\n" "layout (location = 1) in vec2 ptex;\n" "layout (location = 2) uniform mat4 mvp;\n" "out vec4 color;\n" "out vec2 vtex;\n" "void main()\n" "{\n" " gl_Position = mvp * vec4(vpos,1.0f);\n" //" color = vcolor;\n" " vtex = ptex;\n" "}\n"; static const char* fShaderSource = "#version 450 core\n" //"in vec4 color;\n" "in vec2 vtex;\n" "uniform sampler2D tex;\n" "out vec4 fcolor;\n" "void main()\n" "{\n" " fcolor = texture(tex, vtex);\n" "}\n"; //----------------------------------------------------------- // // vertices (position and color) // static const struct { float x, y, z; }vertices[6] = { // front { -1.0f, 1.0f, 1.0f }, { -1.0f, -1.0f, 1.0f }, { 1.0f, -1.0f, 1.0f }, { 1.0f, -1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f }, { -1.0f, 1.0f, 1.0f } }; static const struct { float x, y; } texv[6] = { {0.0f,1.0f}, {0.0f,0.0f}, {1.0f,0.0f}, {1.0f,0.0f}, {1.0f,1.0f}, {0.0f,1.0f} }; static GLuint vt; void Init_shader() { program = glCreateProgram(); GLuint vshader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vshader, 1, &vShaderSource, NULL); glCompileShader(vshader); //------------------------------------------------------------------------------{ //check GLint compiled; glGetShaderiv(vshader, GL_COMPILE_STATUS, &compiled); if (!compiled) { #ifdef _DEBUG GLsizei len; glGetShaderiv(vshader, GL_INFO_LOG_LENGTH, &len); GLchar* log = new GLchar[len + 1]; glGetShaderInfoLog(vshader, len, &len, log); std::cerr << "1 Shader compilation failed: " << log << std::endl; delete[] log; #endif return; } //----------------------------------------------------------------------------} glAttachShader(program, vshader); GLuint fshader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fshader, 1, &fShaderSource, NULL); glCompileShader(fshader); //---------------------------------------------------------------------------{ // check glGetShaderiv(fshader, GL_COMPILE_STATUS, &compiled); if (!compiled) { #ifdef _DEBUG GLsizei len; glGetShaderiv(fshader, GL_INFO_LOG_LENGTH, &len); GLchar* log = new GLchar[len + 1]; glGetShaderInfoLog(fshader, len, &len, log); std::cerr << "1 Shader compilation failed: " << log << std::endl; delete[] log; #endif return; } //--------------------------------------------------------------------------} glAttachShader(program, fshader); glLinkProgram(program); //--------------------------------------------------------------------------{ // check GLint linked; glGetProgramiv(program, GL_LINK_STATUS, &linked); if (!linked) { #ifdef _DEBUG GLsizei len; glGetProgramiv(program, GL_INFO_LOG_LENGTH, &len); GLchar* log = new GLchar[len + 1]; glGetProgramInfoLog(program, len, &len, log); std::cerr << "Shader linking failed: " << log << std::endl; delete[] log; #endif glDeleteShader(GL_VERTEX_SHADER); glDeleteShader(GL_FRAGMENT_SHADER); return; } //----------------------------------------------------------------------------} } void Init_data() { glGenVertexArrays(1,&vt); glBindVertexArray(vt); GLuint vbuff; glGenBuffers(1, &vbuff); glBindBuffer(GL_ARRAY_BUFFER, vbuff); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 7, (void*)0); Image* image = loadBMP("bird.bmp"); glGenTextures(1, &textureId); glBindTexture(GL_TEXTURE_2D, textureId); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->width, image->height, 0, GL_RGB, GL_UNSIGNED_BYTE, image->pixels); delete image; GLuint tbuff; glGenBuffers(1, &tbuff); glBindBuffer(GL_ARRAY_BUFFER, tbuff); glBufferData(GL_ARRAY_BUFFER, sizeof(texv), texv, GL_STATIC_DRAW); glEnableVertexAttribArray(1); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, (void*)0); } void Init_funcSet() { glViewport(0, 0, width, height); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glEnable(GL_LINE_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE); } void display() { glm::mat4 Projection = glm::perspective(45.0f, (float)(width / height), 0.1f, 100.0f); glm::mat4 View = glm::lookAt( glm::vec3(4, 3, -3), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0) ); glm::mat4 Model = glm::mat4(1.0f); glm::mat4 RotationMatrix = glm::eulerAngleY(angle); glm::mat4 mvp = Projection * View * RotationMatrix * Model; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram(program); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textureId); glUniformMatrix4fv(2, 1, GL_FALSE, &mvp[0][0]); glBindVertexArray(vt); glDrawArrays(GL_TRIANGLES, 0, 6); glFlush(); glutSwapBuffers(); } //------------------------------------ // // Reshape window // void reshape(int x, int y) { glViewport(0, 0, x, y); width = x; height = y; } //--------------------------------------- // // update function // void update(int value) { angle += 0.02f; if (angle > 360) { angle -= 360; } glutPostRedisplay(); glutTimerFunc(20, update, 0); } int main(int argc, char ** argv) { width = height = 500; glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize(width, height); glutCreateWindow("OpenGL"); if (glewInit()) { #ifdef _DEBUG std::cerr << "Unable to initialize GLEW ... exiting" << std::endl; #endif exit(EXIT_FAILURE); } Init_shader(); Init_funcSet(); Init_data(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutTimerFunc(20, update, 0); glutMainLoop(); //return 0; // never reach } ``` ```

求问:OpenGL 4.3 通过纹理传递整形数据失败?

GLSL4.3 通过Texture向Shader传递整数数据,但不成功,Shader不能正确读取整数数据, 如果传递的是浮点型的纹理数据,则可以正确读取数据的: 例如:C代码中:glTexStorage2D( GL_TEXTURE_2D, 1, GL_RGBA32F, tw, th ); Shader中:layout (binding = 0) uniform sampler2D tex_float; vec4 data = texelFetch( tex_object, ivec2(0, 0), 0); 可以正确得到 {-100, -100, 0, 1} -------还请大侠出手相助呀 C code: GLuint texFlaot; glGenTextures(1, &texFlaot); glActiveTexture( GL_TEXTURE0 ); glBindTexture(GL_TEXTURE_2D, texFlaot); //const int arrLen = 3*3*4; GLint myFloatBuf[36] = { -100, -100, 0, 1, 0, -100, 0, 1, 100, -100, 0, 1 , -100, 0, 0, 1, 0, 0, 0, 1, 100, 0, 0, 1 , -100, 100, 0, 1, 0, 100, 0, 1, 100, 100, 0, 1 , }; int tw = 3, th = 3; glTexStorage2D( GL_TEXTURE_2D, 1, GL_RGBA32I, tw, th ); glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tw, th, GL_RGBA, GL_INT, myFloatBuf); Shader 代码: //layout (binding = 0) uniform sampler2D tex_float; layout (binding = 0) uniform isampler2D tex_object; void main( void) { // 将输入的Texture数据作为坐标打印 // 将纹理的st(0,0)的值(也就是 myFloatBuf[0][0]={-100, -100, 0, 1,} )最为坐标, // 在该坐标上显示一个点显示在画面上, ivec4 data = texelFetch( tex_object, ivec2(0, 0), 0); vec4 fpos = vec4( data.r, data.g, data.b, data.a ); gl_Position = proj_matrix * mv_matrix * fpos; // 颜色 vs_out.clr = vec4(1.0, 0.0, 0.0, 1.0); }

unity3d获取鼠标点击在plane上的相对坐标

我的plane绑了个脚本,里面有width,height,相当于坐标轴的x,y, 我需要根据鼠标点击plane的坐标去做一些别的处理,现在问题就是这个 点击后的相对坐标怎么取到? 网上有些说用射线检测,但好像没有方法能拿到这个相对坐标,大家都没碰到过这样 的需求吗?网上查了都好像没相关的资料

unity ComputeShader里结构体变量初始化如何不用分支判断

unity ComputeShader里结构体变量初始化如何不用分支判断 init 是一个int 类型 在跑完第一帧之后会被设置成其他值 现在想求助各位大神 如何在不使用标志位的情况下初始化这个结构体里的成员变量 dataBuffer[f].pos = pos; dataBuffer[f].velocity = float3(0, 0, 0); (补充说明:如果没有这个if分支初始化变量会导致不显示,直接初始化没有标志位分支表现结果和预期不符) ``` // Each #kernel tells which function to compile; you can have many kernels #pragma kernel CSMain // Create a RenderTexture with enableRandomWrite flag and set it // with cs.SetTexture RWTexture2D<float4> Result; float3 mousePos; float3 originPos; float deltaTime; int init; float radius; struct Data { float3 pos; float3 velocity; float3 uv; }; RWStructuredBuffer<Data> dataBuffer; //[numthreads(32, 32, 1)] [numthreads(32, 32, 1)] void CSMain(uint3 id : SV_DispatchThreadID) { // TODO: insert actual code here! //id.x 第X列的线程ID //id.y 第Y行的线程ID uint f = id.x + id.y * 32 * 64; // uint f = id.x + id.y * 32 * 64; float3 pos = float3(id.x, id.y, id.z) / 2 + originPos; //计算出原始坐标 dataBuffer[f].uv = ((pos - originPos) / 2048) * 2; //计算出每个点的uv //dataBuffer[f].uv = ((pos - originPos) / 2048) * 2; //计算出每个点的uv if (init == 0)//初始化点 { dataBuffer[f].pos = pos; dataBuffer[f].velocity = float3(0, 0, 0); }else { float3 dis = dataBuffer[f].pos - mousePos; //计算出当前坐标与鼠标点间的向量 float vel = clamp(radius - length(dis), 0.01, radius) * deltaTime * 20; //计算出力 dataBuffer[f].velocity += normalize(dis) * vel; //加上力 dataBuffer[f].velocity = normalize(dataBuffer[f].velocity) * clamp((length(dataBuffer[f].velocity) - deltaTime * 2), 0, radius); //限制力的范围,并且加上指向原始点的力 dataBuffer[f].pos = pos + dataBuffer[f].velocity; //根据力计算出坐标 } } ```

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

课程主要面向嵌入式Linux初学者、工程师、学生 主要从一下几方面进行讲解: 1.linux学习路线、基本命令、高级命令 2.shell、vi及vim入门讲解 3.软件安装下载、NFS、Samba、FTP等服务器配置及使用

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

如何在虚拟机VM上使用串口

在系统内核开发中,经常会用到串口调试,利用VMware的Virtual Machine更是为调试系统内核如虎添翼。那么怎么搭建串口调试环境呢?因为最近工作涉及到这方面,利用强大的google搜索和自己

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:csdn590)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

C++语言基础视频教程

C++语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践体系的结合,帮助初学者有效学习。本教程详细介绍C++语言中的封装、数据隐藏、继承、多态的实现等入门知识;主要包括类的声明、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现等。 课程需要有C语言程序设计的基础(可以利用本人开出的《C语言与程序设计》系列课学习)。学习者能够通过实践的方式,学会利用C++语言解决问题,具备进一步学习利用C++开发应用程序的基础。

北京师范大学信息科学与技术学院笔试10复试真题

北京师范大学信息科学与技术学院笔试,可以更好的让你了解北师大该学院的复试内容,获得更好的成绩。

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

软件测试2小时入门

本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、原则、流程、方法、模型;&nbsp; 2.常用的黑盒测试用例设计方法及示例演示;&nbsp; 3 常用白盒测试用例设计方法及示例演示;&nbsp; 4.自动化测试优缺点、使用范围及示例‘;&nbsp; 5.测试经验谈。

Tomcat服务器下载、安装、配置环境变量教程(超详细)

未经我的允许,请不要转载我的文章,在此郑重声明!!! 请先配置安装好Java的环境,若没有安装,请参照我博客上的步骤进行安装! 安装Java环境教程https://blog.csdn.net/qq_40881680/article/details/83585542 Tomcat部署Web项目(一)·内嵌https://blog.csdn.net/qq_40881680/article/d...

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

微信小程序开发实战之番茄时钟开发

微信小程序番茄时钟视频教程,本课程将带着各位学员开发一个小程序初级实战类项目,针对只看过官方文档而又无从下手的开发者来说,可以作为一个较好的练手项目,对于有小程序开发经验的开发者而言,可以更好加深对小程序各类组件和API 的理解,为更深层次高难度的项目做铺垫。

[已解决]踩过的坑之mysql连接报“Communications link failure”错误

目录 前言 第一种方法: 第二种方法 第三种方法(适用于项目和数据库在同一台服务器) 第四种方法 第五种方法(项目和数据库不在同一台服务器) 总结 前言 先给大家简述一下我的坑吧,(我用的是mysql,至于oracle有没有这样的问题,有心的小伙伴们可以测试一下哈), 在自己做个javaweb测试项目的时候,因为买的是云服务器,所以数据库连接的是用ip地址,用IDE开发好...

人工智能-计算机视觉实战之路(必备算法+深度学习+项目实战)

系列课程主要分为3大阶段:(1)首先掌握计算机视觉必备算法原理,结合Opencv进行学习与练手,通过实际视项目进行案例应用展示。(2)进军当下最火的深度学习进行视觉任务实战,掌握深度学习中必备算法原理与网络模型架构。(3)结合经典深度学习框架与实战项目进行实战,基于真实数据集展开业务分析与建模实战。整体风格通俗易懂,项目驱动学习与就业面试。 建议同学们按照下列顺序来进行学习:1.Python入门视频课程 2.Opencv计算机视觉实战(Python版) 3.深度学习框架-PyTorch实战/人工智能框架实战精讲:Keras项目 4.Python-深度学习-物体检测实战 5.后续实战课程按照自己喜好选择就可以

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

Python数据分析师-实战系列

系列课程主要包括Python数据分析必备工具包,数据分析案例实战,核心算法实战与企业级数据分析与建模解决方案实战,建议大家按照系列课程阶段顺序进行学习。所有数据集均为企业收集的真实数据集,整体风格以实战为导向,通俗讲解Python数据分析核心技巧与实战解决方案。

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

2021考研数学张宇基础30讲.pdf

张宇:博士,全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”,全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

DirectX修复工具V4.0增强版

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复

期末考试评分标准的数学模型

大学期末考试与高中的考试存在很大的不同之处,大学的期末考试成绩是主要分为两个部分:平时成绩和期末考试成绩。平时成绩和期末考试成绩总分一般为一百分,然而平时成绩与期末考试成绩所占的比例不同会导致出现不同

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

c语言项目开发实例

十个c语言案例 (1)贪吃蛇 (2)五子棋游戏 (3)电话薄管理系统 (4)计算器 (5)万年历 (6)电子表 (7)客户端和服务器通信 (8)潜艇大战游戏 (9)鼠标器程序 (10)手机通讯录系统

相关热词 c# 不能序列化继承类 c# char* 调用 c# 开发dll模板 c#添加控件到工具箱 c#控制台组合数 编程计算猴子吃桃问题c# c# wpf 背景透明 随机抽取号码软件c# c# 开发环境 c# 属性和字段
立即提问