当前位置: 首页 > news >正文

郑州网站建设的公司哪家好seo推广话术

郑州网站建设的公司哪家好,seo推广话术,产品网站做营销推广,建筑资料免费下载网站1 在前几期的文章中,我们已经实现了三维正方体的显示了,那我们来实现让物体的由远及近,和由近及远。这里我们需要了解一个概念摄像机。 1.1 摄像机定义:在世界空间中位置、观察方向、指向右侧向量、指向上方的向量。如下图所示: …

1 在前几期的文章中,我们已经实现了三维正方体的显示了,那我们来实现让物体的由远及近,和由近及远。这里我们需要了解一个概念摄像机。

1.1 摄像机定义:在世界空间中位置观察方向指向右侧向量指向上方的向量。如下图所示:

 1.2 实现一个摄像机

首先定义一个摄像机位置,然后获取一个摄影机指向原点的向量,并且获取指向摄像机的单位向量(只关心摄像机的方向,不关心其长度).代码如下所示:

  1. QVector3D cameraPos(0, 0, 3)

  2. QVector3D cameraTarget(0, 0, 0);

  3. QVector3D cameraDirection( (cameraTarget- cameraPos).normalized() )

1.3 摄像机位置

摄像机位置是在世界空间中一个指向摄像机位置的向量。右手坐标系:大拇指指向正x轴方向,食指指向正y轴方向,中指指向正z轴方向,z正轴从屏幕指向自己。

 通过改变摄像机的位置就可以实现物体的远近效果。

在qt opengl 函数里面我们有函数实现了

void QMatrix4x4::lookAt(const QVector3D &eye, const QVector3D &center, const QVector3D &up)
//获取lookAt矩阵.
//eye: 设置摄像机(眼睛)位置,比如QVector3D(0,0,3)
//center:表示摄像机(眼睛)正在看的视图的中心,比如原点QVector3D(0,0,0)
//up:眼睛的上向量,一般为QVector3D(0,1,0),通过该向量就能获取到眼睛的右轴和上轴

 这里我们只需要设置相应的参数就可以了

eye : 就是我们眼睛的位置,这里我们设置Z轴正方向 QVector3D(0, 0, 3);

center : 就是我们以什么地方为中心点观察物体,如QVector3D(0, 0, 0);原点。

up:眼睛的上向量,一般为QVector3D(0,1,0),通过该向量就能获取到眼睛的右轴和上轴

好了,那么我们现在来修改glsl语句和代码实现。

#include "glwidget.h"
#include <QOpenGLShaderProgram>
#include <QOpenGLTexture>
#include <QMouseEvent>
#include <QDateTime>
#include <QtMath>static const char *vertexShaderSource ="#version 330\n""layout (location = 0) in vec4 vertex;\n""layout (location = 1) in vec4 texCoord;\n""out vec4 texc;\n""uniform  mat4 matrix;\n""uniform  mat4 model;\n""uniform  mat4 view;\n""uniform  mat4 projection;\n""void main(void)\n""{\n""    gl_Position =  projection*view* matrix * vertex;\n""    texc = texCoord;\n""}\n";static const char *fragmentShaderSource ="#version 330\n""uniform sampler2D texture;\n""in vec4 texc;\n""void main(void)\n""{\n""    gl_FragColor = texture2D(texture, texc.st);\n""}\n";GLWidget::GLWidget():QOpenGLWidget(),m_xRos(0),m_yRos(0)
{cam = QVector3D(m_xRos, m_yRos, m_zRos);cameraPos = QVector3D(0, 0, 3); 近---远// cameraPos = QVector3D(0, 0, 30);远---近timer = new QTimer;timer->setInterval(20);connect(timer,&QTimer::timeout,this,[=]{qDebug()<<"timeout"<<nCount<<m_xRos;rotateBy(2 * 16, +2 * 16, -1 * 16);});}
GLWidget::~GLWidget()
{makeCurrent();vbo.destroy();for (int i = 0; i < 6; ++i)delete textures[i];delete program;doneCurrent();
}QSize GLWidget::minimumSizeHint() const
{return QSize(400, 400);
}QSize GLWidget::sizeHint() const
{return QSize(400, 400);
}void GLWidget::rotateBy(int xAngle, int yAngle, int zAngle)
{float cameraSpeed = 0.2;cameraPos += cameraSpeed * QVector3D(0, 0, 1);//由远到近//cameraPos -= cameraSpeed * QVector3D(0, 0, 1);//由近到远xRot += xAngle;yRot += yAngle;zRot += zAngle;update();
}void GLWidget::setClearColor(const QColor &color)
{clearColor = color;update();
}void GLWidget::initializeGL()
{vertices = {// ---- 位置----   - 纹理坐标 -      ---- 颜色 ----0.5f, -0.5f, -0.5f,   1.0f, 1.0f,-0.5f, -0.5f, -0.5f,  0.0f, 1.0f,-0.5f, 0.5f, -0.5f,   0.0f, 0.0f,0.5f, 0.5f, -0.5f,   1.0f, 0.0f,//10.5f, 0.5f, -0.5f,   1.0f, 1.0f,-0.5f, 0.5f, -0.5f,  0.0f, 1.0f,-0.5f, 0.5f, 0.5f,   0.0f, 0.0f,0.5f, 0.5f, 0.5f,    1.0f, 0.0f,//20.5f, -0.5f, 0.5f,   1.0f, 1.0f,0.5f, -0.5f, -0.5f,  0.0f, 1.0f,0.5f, 0.5f, -0.5f,   0.0f, 0.0f,0.5f, 0.5f, 0.5f,    1.0f, 0.0f,//3-0.5f, -0.5f, -0.5f,  1.0f, 1.0f,-0.5f, -0.5f, 0.5f,  0.0f, 1.0f,-0.5f, 0.5f, 0.5f,   0.0f, 0.0f,-0.5f, 0.5f, -0.5f,   1.0f, 0.0f,//40.5f, -0.5f, 0.5f,   1.0f, 1.0f,-0.5f, -0.5f, 0.5f,  0.0f, 1.0f,-0.5f, -0.5f, -0.5f, 0.0f, 0.0f,0.5f, -0.5f, -0.5f,  1.0f, 0.0f,//5-0.5f, -0.5f, 0.5f,   1.0f, 1.0f,0.5f, -0.5f, 0.5f,   0.0f, 1.0f,0.5f, 0.5f, 0.5f,    0.0f, 0.0f,-0.5f, 0.5f, 0.5f,    1.0f, 0.0f,};initializeOpenGLFunctions();// makeObject();glEnable(GL_DEPTH_TEST);glEnable(GL_CULL_FACE);//#define PROGRAM_VERTEX_ATTRIBUTE 0
//#define PROGRAM_TEXCOORD_ATTRIBUTE 1program = new QOpenGLShaderProgram;program->addShaderFromSourceCode(QOpenGLShader::Vertex,vertexShaderSource);program->addShaderFromSourceCode(QOpenGLShader::Fragment,fragmentShaderSource);program->link();program->bind();//激活Program对象vbo.create();vbo.bind();              //绑定到当前的OpenGL上下文,vbo.allocate(vertices.constData(), vertices.count() * sizeof(GLfloat));//初始化VAO,设置顶点数据状态(顶点,法线,纹理坐标等)vao.create();vao.bind();for (int j = 0; j < 6; ++j){textures[j] = new QOpenGLTexture(QImage(QString(":/cube%1.png").arg(j + 1)).mirrored());textures[j]->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear,QOpenGLTexture::Linear);textures[j]->setWrapMode(QOpenGLTexture::DirectionS, QOpenGLTexture::ClampToEdge);textures[j]->setWrapMode(QOpenGLTexture::DirectionT, QOpenGLTexture::ClampToEdge);}program->setAttributeBuffer(0, GL_FLOAT, 0,                  3, 5 * sizeof(float));   //设置aPos顶点属性program->setAttributeBuffer(1, GL_FLOAT, 3 * sizeof(float),  2, 5 * sizeof(float));   //设置aColor顶点颜色program->enableAttributeArray(0); //使能aPos顶点属性program->enableAttributeArray(1); //使能aColor顶点颜色program->setUniformValue("texture", 0);QMatrix4x4 projection;projection.perspective(60,(float)width()/height(),0.1,100);//构建透视矩阵,这个可以是固定写法program->setUniformValue("projection", projection);//    vao.release();
//    vbo.release();
}void GLWidget::paintGL()
{//glClearColor(clearColor.redF(), clearColor.greenF(), clearColor.blueF(), clearColor.alphaF());glEnable(GL_DEPTH_TEST);glClearColor(0.1f,0.5f,0.7f,1.0f);  //设置清屏颜色glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);QMatrix4x4 m;//m.ortho(-0.5f, +0.5f, +0.5f, -0.5f, 4.0f, 15.0f);m.translate(0.0f, 0.0f, 0.0f);m.rotate(xRot / 16.0f, 1.0f, 0.0f, 0.0f);m.rotate(yRot / 16.0f, 0.0f, 1.0f, 0.0f);m.rotate(zRot / 16.0f, 0.0f, 0.0f, 1.0f);m.scale(0.5);program->setUniformValue("matrix", m);//    QMatrix4x4 view;
//    view.translate(0.0f,0.0f,-3.0f);
//    program->setUniformValue("view", view);QMatrix4x4 view;view.lookAt(cameraPos, QVector3D(0, 0, 0), QVector3D(0, 1, 0));//view.lookAt(cameraPos, cameraPos+QVector3D(0,0,-1), QVector3D(0,1,0));program->setUniformValue("view", view);for (int i = 0; i < 6; ++i) {textures[i]->bind();glDrawArrays(GL_TRIANGLE_FAN, i * 4, 4);}
}
void GLWidget::resizeGL(int width, int height)
{this->glViewport(0,0,width,height);                //定义视口区域
}void GLWidget::mousePressEvent(QMouseEvent *event)
{lastPos = event->pos();timer->start();
}void GLWidget::mouseMoveEvent(QMouseEvent *event)
{int dx = event->x() - lastPos.x();int dy = event->y() - lastPos.y();if (event->buttons() & Qt::LeftButton) {rotateBy(8 * dy, 8 * dx, 0);} else if (event->buttons() & Qt::RightButton) {rotateBy(8 * dy, 0, 8 * dx);}lastPos = event->pos();
}void GLWidget::mouseReleaseEvent(QMouseEvent * /* event */)
{emit clicked();
}
#ifndef GLWIDGET_H
#define GLWIDGET_H#include <QOpenGLWidget>
#include <QOpenGLFunctions>
#include <QOpenGLBuffer>
#include <QOpenGLVertexArrayObject>
#include <QTimer>
#include <QOpenGLTexture>
#include <QOpenGLShaderProgram>QT_FORWARD_DECLARE_CLASS(QOpenGLShaderProgram);
QT_FORWARD_DECLARE_CLASS(QOpenGLTexture)class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions
{Q_OBJECTpublic://using QOpenGLWidget::QOpenGLWidget;GLWidget();~GLWidget();QSize minimumSizeHint() const override;QSize sizeHint() const override;void rotateBy(int xAngle, int yAngle, int zAngle);void setClearColor(const QColor &color);signals:void clicked();protected:void initializeGL() override;void paintGL() override;void resizeGL(int width, int height) override;void mousePressEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;void mouseReleaseEvent(QMouseEvent *event) override;private:QColor clearColor = Qt::black;QPoint lastPos;int xRot = 0;int yRot = 0;int zRot = 0;QOpenGLTexture *textures[6] = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr};QOpenGLShaderProgram *program = nullptr;QOpenGLBuffer vbo;QVector<float> vertices;QOpenGLVertexArrayObject vao;QTimer* timer;float m_xRos = 0.0f;float m_yRos = 0.0f;float m_zRos = 3.0f;QVector3D   cam;int nCount=0;QVector3D cameraPos;QVector3D cameraTarget;QVector3D cameraDirection;
};#endif

 运行下代码是不是就是可以由远到近和由近到远了呢.

我们初始化

cameraPos = QVector3D(0, 0, 3);    
cameraPos += cameraSpeed * QVector3D(0, 0, 1);//由近到远

这样写就是近--远了呢

cameraPos = QVector3D(0, 0, 30);
cameraPos -= cameraSpeed * QVector3D(0, 0, 1);//由远到近了呢

我们这样写是固定了摄像机观察的点是QVector3D(0, 0, 0),可是有个问题是不是当我们设置eye为

cameraPos = QVector3D(0, 0, 30);的时候,运行出来显示出来的效果是由远到近,然后又近到远了呢?为什么?因为

cameraPos -= cameraSpeed * QVector3D(0, 0, 1);这个值减少到负方向了?

所以我们修改下程序,修改center(摄像机观察的点)让观察点随着摄像机变化,是不是就没有由远到近 ,然后又由近到远呢?上代码


#include "glwidget.h"
#include <QOpenGLShaderProgram>
#include <QOpenGLTexture>
#include <QMouseEvent>
#include <QDateTime>
#include <QtMath>static const char *vertexShaderSource ="#version 330\n""layout (location = 0) in vec4 vertex;\n""layout (location = 1) in vec4 texCoord;\n""out vec4 texc;\n""uniform  mat4 matrix;\n""uniform  mat4 model;\n""uniform  mat4 view;\n""uniform  mat4 projection;\n""void main(void)\n""{\n""    gl_Position =  projection*view* matrix * vertex;\n""    texc = texCoord;\n""}\n";static const char *fragmentShaderSource ="#version 330\n""uniform sampler2D texture;\n""in vec4 texc;\n""void main(void)\n""{\n""    gl_FragColor = texture2D(texture, texc.st);\n""}\n";GLWidget::GLWidget():QOpenGLWidget(),m_xRos(0),m_yRos(0)
{cam = QVector3D(m_xRos, m_yRos, m_zRos);cameraPos = QVector3D(0, 0, 3);timer = new QTimer;timer->setInterval(20);connect(timer,&QTimer::timeout,this,[=]{qDebug()<<"timeout"<<nCount<<m_xRos;rotateBy(2 * 16, +2 * 16, -1 * 16);});}
GLWidget::~GLWidget()
{makeCurrent();vbo.destroy();for (int i = 0; i < 6; ++i)delete textures[i];delete program;doneCurrent();
}QSize GLWidget::minimumSizeHint() const
{return QSize(400, 400);
}QSize GLWidget::sizeHint() const
{return QSize(400, 400);
}void GLWidget::rotateBy(int xAngle, int yAngle, int zAngle)
{float cameraSpeed = 0.2;cameraPos -= cameraSpeed * QVector3D(0, 0, -1);//由远到近//cameraPos += cameraSpeed * QVector3D(0, 0, -1);//由近到远xRot += xAngle;yRot += yAngle;zRot += zAngle;update();
}void GLWidget::setClearColor(const QColor &color)
{clearColor = color;update();
}void GLWidget::initializeGL()
{vertices = {// ---- 位置----   - 纹理坐标 -      ---- 颜色 ----0.5f, -0.5f, -0.5f,   1.0f, 1.0f,-0.5f, -0.5f, -0.5f,  0.0f, 1.0f,-0.5f, 0.5f, -0.5f,   0.0f, 0.0f,0.5f, 0.5f, -0.5f,   1.0f, 0.0f,//10.5f, 0.5f, -0.5f,   1.0f, 1.0f,-0.5f, 0.5f, -0.5f,  0.0f, 1.0f,-0.5f, 0.5f, 0.5f,   0.0f, 0.0f,0.5f, 0.5f, 0.5f,    1.0f, 0.0f,//20.5f, -0.5f, 0.5f,   1.0f, 1.0f,0.5f, -0.5f, -0.5f,  0.0f, 1.0f,0.5f, 0.5f, -0.5f,   0.0f, 0.0f,0.5f, 0.5f, 0.5f,    1.0f, 0.0f,//3-0.5f, -0.5f, -0.5f,  1.0f, 1.0f,-0.5f, -0.5f, 0.5f,  0.0f, 1.0f,-0.5f, 0.5f, 0.5f,   0.0f, 0.0f,-0.5f, 0.5f, -0.5f,   1.0f, 0.0f,//40.5f, -0.5f, 0.5f,   1.0f, 1.0f,-0.5f, -0.5f, 0.5f,  0.0f, 1.0f,-0.5f, -0.5f, -0.5f, 0.0f, 0.0f,0.5f, -0.5f, -0.5f,  1.0f, 0.0f,//5-0.5f, -0.5f, 0.5f,   1.0f, 1.0f,0.5f, -0.5f, 0.5f,   0.0f, 1.0f,0.5f, 0.5f, 0.5f,    0.0f, 0.0f,-0.5f, 0.5f, 0.5f,    1.0f, 0.0f,};initializeOpenGLFunctions();// makeObject();glEnable(GL_DEPTH_TEST);glEnable(GL_CULL_FACE);//#define PROGRAM_VERTEX_ATTRIBUTE 0
//#define PROGRAM_TEXCOORD_ATTRIBUTE 1program = new QOpenGLShaderProgram;program->addShaderFromSourceCode(QOpenGLShader::Vertex,vertexShaderSource);program->addShaderFromSourceCode(QOpenGLShader::Fragment,fragmentShaderSource);program->link();program->bind();//激活Program对象vbo.create();vbo.bind();              //绑定到当前的OpenGL上下文,vbo.allocate(vertices.constData(), vertices.count() * sizeof(GLfloat));//初始化VAO,设置顶点数据状态(顶点,法线,纹理坐标等)vao.create();vao.bind();for (int j = 0; j < 6; ++j){textures[j] = new QOpenGLTexture(QImage(QString(":/cube%1.png").arg(j + 1)).mirrored());textures[j]->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear,QOpenGLTexture::Linear);textures[j]->setWrapMode(QOpenGLTexture::DirectionS, QOpenGLTexture::ClampToEdge);textures[j]->setWrapMode(QOpenGLTexture::DirectionT, QOpenGLTexture::ClampToEdge);}program->setAttributeBuffer(0, GL_FLOAT, 0,                  3, 5 * sizeof(float));   //设置aPos顶点属性program->setAttributeBuffer(1, GL_FLOAT, 3 * sizeof(float),  2, 5 * sizeof(float));   //设置aColor顶点颜色program->enableAttributeArray(0); //使能aPos顶点属性program->enableAttributeArray(1); //使能aColor顶点颜色program->setUniformValue("texture", 0);QMatrix4x4 projection;projection.perspective(60,(float)width()/height(),0.1,100);//构建透视矩阵,这个可以是固定写法program->setUniformValue("projection", projection);//    vao.release();
//    vbo.release();
}void GLWidget::paintGL()
{//glClearColor(clearColor.redF(), clearColor.greenF(), clearColor.blueF(), clearColor.alphaF());glEnable(GL_DEPTH_TEST);glClearColor(0.1f,0.5f,0.7f,1.0f);  //设置清屏颜色glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);QMatrix4x4 m;//m.ortho(-0.5f, +0.5f, +0.5f, -0.5f, 4.0f, 15.0f);m.translate(0.0f, 0.0f, 0.0f);m.rotate(xRot / 16.0f, 1.0f, 0.0f, 0.0f);m.rotate(yRot / 16.0f, 0.0f, 1.0f, 0.0f);m.rotate(zRot / 16.0f, 0.0f, 0.0f, 1.0f);m.scale(0.5);program->setUniformValue("matrix", m);//    QMatrix4x4 view;
//    view.translate(0.0f,0.0f,-3.0f);
//    program->setUniformValue("view", view);QMatrix4x4 view;view.lookAt(cameraPos, cameraPos+QVector3D(0,0,-1), QVector3D(0,1,0));program->setUniformValue("view", view);for (int i = 0; i < 6; ++i) {textures[i]->bind();glDrawArrays(GL_TRIANGLE_FAN, i * 4, 4);}
}
void GLWidget::resizeGL(int width, int height)
{this->glViewport(0,0,width,height);                //定义视口区域
}void GLWidget::mousePressEvent(QMouseEvent *event)
{lastPos = event->pos();timer->start();
}void GLWidget::mouseMoveEvent(QMouseEvent *event)
{int dx = event->x() - lastPos.x();int dy = event->y() - lastPos.y();if (event->buttons() & Qt::LeftButton) {rotateBy(8 * dy, 8 * dx, 0);} else if (event->buttons() & Qt::RightButton) {rotateBy(8 * dy, 0, 8 * dx);}lastPos = event->pos();
}void GLWidget::mouseReleaseEvent(QMouseEvent * /* event */)
{emit clicked();
}

我们运行程序,最后点击下屏幕,是不是实现了呢?


文章转载自:
http://finalize.sqxr.cn
http://urochordate.sqxr.cn
http://pulj.sqxr.cn
http://ivanovo.sqxr.cn
http://uricotelic.sqxr.cn
http://spilth.sqxr.cn
http://autoput.sqxr.cn
http://sellout.sqxr.cn
http://vowellike.sqxr.cn
http://quackery.sqxr.cn
http://skolly.sqxr.cn
http://meson.sqxr.cn
http://synopsis.sqxr.cn
http://timpanist.sqxr.cn
http://determination.sqxr.cn
http://reeb.sqxr.cn
http://nuclearization.sqxr.cn
http://cowslip.sqxr.cn
http://dipole.sqxr.cn
http://jingling.sqxr.cn
http://wagon.sqxr.cn
http://jugulation.sqxr.cn
http://flatwork.sqxr.cn
http://tuckaway.sqxr.cn
http://plumply.sqxr.cn
http://uncorrected.sqxr.cn
http://degender.sqxr.cn
http://sextyping.sqxr.cn
http://throughway.sqxr.cn
http://vomer.sqxr.cn
http://favourer.sqxr.cn
http://inobtrusive.sqxr.cn
http://weepy.sqxr.cn
http://trolleybus.sqxr.cn
http://antenumber.sqxr.cn
http://timeouts.sqxr.cn
http://graphotype.sqxr.cn
http://tussocky.sqxr.cn
http://fact.sqxr.cn
http://calabash.sqxr.cn
http://winifred.sqxr.cn
http://risker.sqxr.cn
http://cogitative.sqxr.cn
http://eulogistical.sqxr.cn
http://chantage.sqxr.cn
http://dniester.sqxr.cn
http://dastard.sqxr.cn
http://mudflow.sqxr.cn
http://boschvark.sqxr.cn
http://posttensioning.sqxr.cn
http://polycystic.sqxr.cn
http://nom.sqxr.cn
http://columbus.sqxr.cn
http://sleigh.sqxr.cn
http://gangmaster.sqxr.cn
http://debrief.sqxr.cn
http://glonoin.sqxr.cn
http://sonofabitch.sqxr.cn
http://elasticity.sqxr.cn
http://plover.sqxr.cn
http://abridged.sqxr.cn
http://weathercast.sqxr.cn
http://gullet.sqxr.cn
http://misemphasis.sqxr.cn
http://diathermization.sqxr.cn
http://chapiter.sqxr.cn
http://court.sqxr.cn
http://neoptolemus.sqxr.cn
http://pern.sqxr.cn
http://xerothermic.sqxr.cn
http://rassling.sqxr.cn
http://waterman.sqxr.cn
http://incorporable.sqxr.cn
http://gullable.sqxr.cn
http://stairway.sqxr.cn
http://pettifogging.sqxr.cn
http://ussuriisk.sqxr.cn
http://alimentation.sqxr.cn
http://snigger.sqxr.cn
http://pericardiocentesis.sqxr.cn
http://narcotic.sqxr.cn
http://cloven.sqxr.cn
http://heads.sqxr.cn
http://sideroblast.sqxr.cn
http://bojardo.sqxr.cn
http://hippish.sqxr.cn
http://ergonomics.sqxr.cn
http://ptomaine.sqxr.cn
http://obpyramidal.sqxr.cn
http://unenlightening.sqxr.cn
http://rondel.sqxr.cn
http://tailing.sqxr.cn
http://fiendish.sqxr.cn
http://reebok.sqxr.cn
http://ayd.sqxr.cn
http://glaciation.sqxr.cn
http://augean.sqxr.cn
http://imposure.sqxr.cn
http://rarebit.sqxr.cn
http://cryptonym.sqxr.cn
http://www.15wanjia.com/news/72597.html

相关文章:

  • 策划营销有限公司上海优化外包公司排名
  • 解析网站接口怎么做网络营销是指什么
  • 广东中南建设有限公司网站友情链接交换网
  • 建设银行网站登录网站建站开发
  • 四川省人民政府采购网搜索引擎优化指的是
  • 学完html怎么做网站深圳网络推广哪家公司好
  • 网站色彩设计百度网盘网页版登录首页
  • 404 没有找到网站 试试申请收录吧国际新闻最新消息今天 新闻
  • 顺义网站建设推广优化seo北京自动seo
  • 视频上传网站建设杭州seo教程
  • 网站建站图片百度有几种推广方式
  • 做app网站搜狗推广开户
  • 直播型网站开发视频营销案例
  • 学做网站有用吗免费产品推广网站
  • 做调查问卷赚钱网站网络推广和信息流优化一样么
  • 网站数据包括哪些内容seo优化名词解释
  • 个人网站设计成品下载seoyoon
  • 网站建设设计原则精准网络推广
  • dw怎么做单页网站seo优化什么意思
  • 网站建设mus18怎么做百度推广平台
  • 网站开发过程总结宣传推广渠道有哪些
  • 济南做网站建设店铺推广平台有哪些
  • 网站建设推广关键词重庆百度推广排名
  • 网店美工设计模板怎么做seo信息优化
  • 南京高淳疫情最新消息汕头seo代理
  • imap 做网站网络防御中心
  • 苏州最大的网站建设公司湖南网站建设推广优化
  • 做h大片免费观看网站企业网站分析报告
  • 东莞营销型网站开发百度指数查询官方下载
  • 潍坊网站建设SEO优化关键词歌曲免费听